C++ 数据类型强制转化的实现

C++常见类型主要为

// 一个字节等于 8 bit
[signed] int //字节数为 4
unsigned [int] //字节数为 4
short [int] //字节数 2
unsigned short [int] //字节数 2
long [int] //字节数 4
unsigned long [int] //字节数 4
[signed] char //字节数 1
unsigned char //字节数 1
float //字节数 4
double //字节数 8
long long [int] //字节数 8
unsigned long long [int] //字节数 8
size_t //字节数 4-8

如下 C++ 11代码

#include<bits/stdc++.h>
using namespace std;
int main(){
 // 高位转化为低位
 unsigned long x1 = pow(2,32)-1; // 无符号
 cout<<"实际存取数字:"<<x1<<endl;
 cout<<"利用长整型来存取实际数字:"<<long(x1)<<endl; // 溢出
 cout<<"利用整型来存取实际数字:"<<int(x1)<<endl; // 溢出
 cout<<"利用字符型来存取实际数字:"<<char(x1)<<endl; // 溢出 输出为空格 字符 

 cout<<"------------------------------------------"<<endl;
 // 低位转化为高位
 char x2 = pow(2,7)-1; // 有符号
 cout<<"实际存取字符:"<<x2<<endl; // 输出为空格 ASCII码
 cout<<"利用无符号字符型来存取实际字符:"<<(unsigned char)(x2)<<endl; // 输出为空格 ASCII码
 cout<<"利用短整型来存取实际数字:"<<short(x2)<<endl;
 cout<<"利用整型来存取实际数字:"<<int(x2)<<endl;
 cout<<"利用无符号长整型来存取实际数字:"<<(unsigned int)(x2)<<endl;
 cout<<"利用无符号长整型来存取实际数字:"<<(unsigned long)(x2)<<endl;
 cout<<"利用单精度浮点型来存取实际数字:"<<float(x2)<<endl;
 cout<<"利用双精度浮点型来存取实际数字:"<<double(x2)<<endl;
 // 更高范围的整数类型转化
 cout<<"利用长长整型来存取实际数字:"<<(long long)(pow(2,62)-1)<<endl;
 cout<<"利用无符号长长整型来存取实际数字:"<<(unsigned long long)(pow(2,63)-1)<<endl;
 // 特殊类型强制转化
 cout<<"利用size_t类型来存取x1:"<<size_t(x1)<<endl;
 cout<<"利用size_t类型来存取x2:"<<size_t(x2)<<endl;
 cout<<"利用size_t类型来存取 x1+1 : "<<size_t(x1+1)<<endl; // 溢出
 cout<<"利用size_t类型来存取 -1 : "<<size_t(-1)<<endl; // 溢出
 return 0;
}

结果如下:

C++ 4种强制类型转换:

在C++语言中新增了四个关键字static_cast、const_cast、reinterpret_cast和dynamic_cast。这四个关键字都是用于强制类型转换的。

新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。

C++中风格是static_cast<type>(content)。C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干什么。程序员只要扫一眼这样的代码,就能立即知道一个强制转换的目的。

1) static_cast

在C++语言中static_cast用于数据类型的强制转换,强制将一种数据类型转换为另一种数据类型。例如将整型数据转换为浮点型数据。
[例1]C语言所采用的类型转换方式:

int a = 10;
int b = 3;
double result = (double)a / (double)b;

例1中将整型变量a和b转换为双精度浮点型,然后相除。在C++语言中,我们可以采用static_cast关键字来进行强制类型转换,如下所示。
[例2]static_cast关键字的使用:

int a = 10;
int b = 3;
double result = static_cast<double>(a) / static_cast<double>(b);

在本例中同样是将整型变量a转换为双精度浮点型。采用static_cast进行强制数据类型转换时,将想要转换成的数据类型放到尖括号中,将待转换的变量或表达式放在元括号中,其格式可以概括为如下形式:

用法:static_cast <类型说明符> (变量或表达式)

它主要有如下几种用法:
    (1)用于类层次结构中基类和派生类之间指针或引用的转换
      进行上行转换(把派生类的指针或引用转换成基类表示)是安全的
      进行下行转换(把基类的指针或引用转换为派生类表示),由于没有动态类型检查,所以是不安全的
    (2)用于基本数据类型之间的转换,如把int转换成char。这种转换的安全也要开发人员来保证
    (3)把空指针转换成目标类型的空指针
    (4)把任何类型的表达式转换为void类型
    注意:static_cast不能转换掉expression的const、volitale或者__unaligned属性。

static_cast:可以实现C++中内置基本数据类型之间的相互转换。

如果涉及到类的话,static_cast只能在有相互联系的类型中进行相互转换,不一定包含虚函数。

2) const_cast

在C语言中,const限定符通常被用来限定变量,用于表示该变量的值不能被修改。

而const_cast则正是用于强制去掉这种不能被修改的常数特性,但需要特别注意的是const_cast不是用于去除变量的常量性,而是去除指向常数对象的指针或引用的常量性,其去除常量性的对象必须为指针或引用。

用法:const_cast<type_id> (expression)
    该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。
    常量指针被转化成非常量指针,并且仍然指向原来的对象;
    常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。

[例3]一个错误的例子:

const int a = 10;
const int * p = &a; *p = 20; //compile error int b = const_cast<int>(a); //compile error

在本例中出现了两个编译错误,第一个编译错误是*p因为具有常量性,其值是不能被修改的;另一处错误是const_cast强制转换对象必须为指针或引用,而例3中为一个变量,这是不允许的!

[例4]const_cast关键字的使用

#include<iostream>
using namespace std;

int main()
{
 const int a = 10;
 const int * p = &a;
 int *q;
 q = const_cast<int *>(p);
 *q = 20; //fine
 cout <<a<<" "<<*p<<" "<<*q<<endl;
  cout <<&a<<" "<<p<<" "<<q<<endl;
 return 0;
}

在本例中,我们将变量a声明为常量变量,同时声明了一个const指针指向该变量(此时如果声明一个普通指针指向该常量变量的话是不允许的,Visual Studio 2010编译器会报错)。

之后我们定义了一个普通的指针*q。将p指针通过const_cast去掉其常量性,并赋给q指针。之后我再修改q指针所指地址的值时,这是不会有问题的。

最后将结果打印出来,运行结果如下:
10 20 20
002CFAF4 002CFAF4 002CFAF4

查看运行结果,问题来了,指针p和指针q都是指向a变量的,指向地址相同,而且经过调试发现002CFAF4地址内的值确实由10被修改成了20,这是怎么一回事呢?为什么a的值打印出来还是10呢?

其实这是一件好事,我们要庆幸a变量最终的值没有变成20!变量a一开始就被声明为一个常量变量,不管后面的程序怎么处理,它就是一个常量,就是不会变化的。试想一下如果这个变量a最终变成了20会有什么后果呢?对于这些简短的程序而言,如果最后a变成了20,我们会一眼看出是q指针修改了,但是一旦一个项目工程非常庞大的时候,在程序某个地方出现了一个q这样的指针,它可以修改常量a,这是一件很可怕的事情的,可以说是一个程序的漏洞,毕竟将变量a声明为常量就是不希望修改它,如果后面能修改,这就太恐怖了。

在例4中我们称“*q=20”语句为未定义行为语句,所谓的未定义行为是指在标准的C++规范中并没有明确规定这种语句的具体行为,该语句的具体行为由编译器来自行决定如何处理。对于这种未定义行为的语句我们应该尽量予以避免!

从例4中我们可以看出我们是不想修改变量a的值的,既然如此,定义一个const_cast关键字强制去掉指针的常量性到底有什么用呢?我们接着来看下面的例子。

例5:

#include<iostream>
using namespace std;

const int * Search(const int * a, int n, int val);

int main()
{
 int a[10] = {0,1,2,3,4,5,6,7,8,9};
 int val = 5;
 int *p;
 p = const_cast<int *>(Search(a, 10, val));
 if(p == NULL)
  cout<<"Not found the val in array a"<<endl;
 else
  cout<<"hvae found the val in array a and the val = "<<*p<<endl;
 return 0;
}

const int * Search(const int * a, int n, int val)
{
 int i;
 for(i=0; i<n; i++)
 {
  if(a[i] == val)
   return &a[i];
 }
 return NULL;
}

在例5中我们定义了一个函数,用于在a数组中寻找val值,如果找到了就返回该值的地址,如果没有找到则返回NULL。函数Search返回值是const指针,当我们在a数组中找到了val值的时候,我们会返回val的地址,最关键的是a数组在main函数中并不是const,因此即使我们去掉返回值的常量性有可能会造成a数组被修改,但是这也依然是安全的。

对于引用,我们同样能使用const_cast来强制去掉常量性,如例6所示。

例6:

#include<iostream>
using namespace std;

const int & Search(const int * a, int n, int val);

int main()
{
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int val = 5;
int &p = const_cast<int &>(Search(a, 10, val));
if(p == NULL)
cout<<"Not found the val in array a"<<endl;
else
cout<<"hvae found the val in array a and the val = "<<p<<endl;
return 0;
}

const int & Search(const int * a, int n, int val)
{
int i;
for(i=0; i<n; i++)
{
if(a[i] == val)
return a[i];
}
return NULL;
}

了解了const_cast的使用场景后,可以知道使用const_cast通常是一种无奈之举,同时也建议大家在今后的C++程序设计过程中一定不要利用const_cast去掉指针或引用的常量性并且去修改原始变量的数值,这是一种非常不好的行为。

3) reinterpret_cast

在C++语言中,reinterpret_cast主要有三种强制转换用途:改变指针或引用的类型、将指针或引用转换为一个足够长度的整形、将整型转换为指针或引用类型。

用法:reinterpret_cast<type_id> (expression)
    type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。
    它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。
    在使用reinterpret_cast强制转换过程仅仅只是比特位的拷贝,因此在使用过程中需要特别谨慎!

例7:

int *a = new int;
double *d = reinterpret_cast<double *>(a);

在例7中,将整型指针通过reinterpret_cast强制转换成了双精度浮点型指针。
reinterpret_cast可以将指针或引用转换为一个足够长度的整形,此中的足够长度具体长度需要多少则取决于操作系统,如果是32位的操作系统,就需要4个字节及以上的整型,如果是64位的操作系统则需要8个字节及以上的整型。

4) dynamic_cast

用法:dynamic_cast<type_id> (expression)

(1)其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。

(2)不能用于内置的基本数据类型的强制转换。

(3)dynamic_cast转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL。

(4)使用dynamic_cast进行转换的,基类中一定要有虚函数,否则编译不通过。

B中需要检测有虚函数的原因:类中存在虚函数,就说明它有想要让基类指针或引用指向派生类对象的情况,此时转换才有意义。

这是由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表(关于虚函数表的概念,详细可见<Inside c++ object model>)中,
        只有定义了虚函数的类才有虚函数表。

(5)在类的转换时,在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的。在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。

向上转换,即为子类指针指向父类指针(一般不会出问题);向下转换,即将父类指针转化子类指针。

向下转换的成功与否还与将要转换的类型有关,即要转换的指针指向的对象的实际类型与转换以后的对象类型一定要相同,否则转换失败。

在C++中,编译期的类型转换有可能会在运行时出现错误,特别是涉及到类对象的指针或引用操作时,更容易产生错误。Dynamic_cast操作符则可以在运行期对可能产生问题的类型转换进行测试。

例1:

#include<iostream>
using namespace std;

class base
{
public :
 void m(){cout<<"m"<<endl;}
};

class derived : public base
{
public:
 void f(){cout<<"f"<<endl;}
};

int main()
{
 derived * p;
 p = new base;
 p = static_cast<derived *>(new base);
 p->m();
 p->f();
 return 0;
}

本例中定义了两个类:base类和derived类,这两个类构成继承关系。在base类中定义了m函数,derived类中定义了f函数。在前面介绍多态时,我们一直是用基类指针指向派生类或基类对象,而本例则不同了。

本例主函数中定义的是一个派生类指针,当我们将其指向一个基类对象时,这是错误的,会导致编译错误。

但是通过强制类型转换我们可以将派生类指针指向一个基类对象,p = static_cast<derived *>(new base);语句实现的就是这样一个功能,这样的一种强制类型转换时合乎C++语法规定的,但是是非常不明智的,它会带来一定的危险。

在程序中p是一个派生类对象,我们将其强制指向一个基类对象,首先通过p指针调用m函数,因为基类中包含有m函数,这一句没有问题,之后通过p指针调用f函数。一般来讲,因为p指针是一个派生类类型的指针,而派生类中拥有f函数,因此p->f();这一语句不会有问题,但是本例中p指针指向的确实基类的对象,而基类中并没有声明f函数,虽然p->f();这一语句虽然仍没有语法错误,但是它却产生了一个运行时的错误。换言之,p指针是派生类指针,这表明程序设计人员可以通过p指针调用派生类的成员函数f,但是在实际的程序设计过程中却误将p指针指向了一个基类对象,这就导致了一个运行期错误。

产生这种运行期的错误原因在于static_cast强制类型转换时并不具有保证类型安全的功能,而C++提供的dynamic_cast却能解决这一问题,dynamic_cast可以在程序运行时检测类型转换是否类型安全。

当然dynamic_cast使用起来也是有条件的,它要求所转换的操作数必须包含多态类类型(即至少包含一个虚函数的类)。

例2:

#include<iostream>
using namespace std;

class base
{
public :
 void m(){cout<<"m"<<endl;}
};

class derived : public base
{
public:
 void f(){cout<<"f"<<endl;}
};

int main()
{
 derived * p;
 p = new base;
 p = dynamic_cast<derived *>(new base);
 p->m();
 p->f();
 return 0;
}

在本例中利用dynamic_cast进行强制类型转换,但是因为base类中并不存在虚函数,因此p = dynamic_cast<derived *>(new base);这一句会编译错误。

为了解决本例中的语法错误,我们可以将base类中的函数m声明为虚函数,virtual void m(){cout<<"m"<<endl;}。

dynamic_cast还要求<>内部所描述的目标类型必须为指针或引用。

例3:

#include<iostream>
#include<cstring>

using namespace std;

class A
{
 public:
 virtual void f()
 {
  cout<<"hello"<<endl;
  };
};

class B:public A
{
 public:
 void f()
 {
  cout<<"hello2"<<endl;
  };

};

class C
{
 void pp()
 {
  return;
 }
};

int fun()
{
 return 1;
}

int main()
{
 A* a1=new B;//a1是A类型的指针指向一个B类型的对象
 A* a2=new A;//a2是A类型的指针指向一个A类型的对象
 B* b;
 C* c;
 b=dynamic_cast<B*>(a1);//结果为not null,向下转换成功,a1之前指向的就是B类型的对象,所以可以转换成B类型的指针。
 if(b==NULL)
 {
  cout<<"null"<<endl;
 }

 else
 {
  cout<<"not null"<<endl;
 }

 b=dynamic_cast<B*>(a2);//结果为null,向下转换失败
 if(b==NULL)
 {
  cout<<"null"<<endl;
 }

 else
 {
  cout<<"not null"<<endl;
 }

 c=dynamic_cast<C*>(a);//结果为null,向下转换失败
 if(c==NULL)
 {
  cout<<"null"<<endl;
 }

 else
 {
  cout<<"not null"<<endl;
 }

 delete(a);
 return 0;
}

到此这篇关于C++ 数据类型强制转化的实现的文章就介绍到这了,更多相关C++ 数据类型强制转化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-02-22

C++学习小结之数据类型及转换方式

一.输入输出语句 Console.ReadLine(); 会等待直到用户按下回车,一次读入一行 Console.ReadKey(); 则是等待用户按下任意键,一次读入一个字符. 二.数据类型 主要掌握: 1.值类型:int 整型,float 浮点型(单精度), double 双精度,char 字符型,bool 布尔型(两种状态true与false),datetime  日期时间 2.引用类型:string 字符串类型 问题? a.字符串与字符的区别:string类型使用 "",char

C++编程中的数据类型和常量学习教程

C++数据类型 计算机处理的对象是数据,而数据是以某种特定的形式存在的(例如整数.浮点数.字符等形式).不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组).数据结构指的是数据的组织形式.例如,数组就是一种数据结构.不同的计算机语言所允许使用的数据结构是不同的.处理同一类问题,如果数据结构不同,算法也会不同.例如,对10个整数排序和对包含10个元素的整型数组排序的算法是不同的. C++的数据包括常量与变量,常量与变量都具有类型.由以上这些数据类型还可以构成更复杂的数据结构.例如利

Visual C++ 常用数据类型转换方法详解第1/2页

说明:本文纯粹是总结一下有关类型转换的贴子, 本人并未对所有方法都做测试,仅仅是为了给大家一个参考. 读者层次:初学 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]="程佩君"; char temp[200]; char *buf; CString str; _variant_t v1; _bstr_t v2; 一.其它数据类型转换为字符串 短整型(int) itoa(i,te

C和C++中的基本数据类型的大小及表示范围详解

本文研究的主要问题时关于C和C++中的基本数据类型int.long.long long.float.double.char.string的大小及表示范围,具体介绍如下. 一.基本类型的大小及范围的总结(以下所讲都是默认在32位操作系统下): 字节:byte:位:bit. 1.短整型short:所占内存大小:2byte=16bit: 所能表示范围:-32768~32767:(即-2^15~2^15-1) 2.整型int:所占内存大小:4byte=32bit: 所能表示范围:-2147483648~

C++中指针的数据类型和运算相关知识小结

C++有关指针的数据类型和指针运算的小结 前面已用过一些指针运算(如p++,p+i等),现在把全部的指针运算列出如下. 1) 指针变量加/减 一个整数 例如:p++,p--,p+i,p-i,p+-i,p-=i等. C++规定,一个指针变量加/减一个整数是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相加或相减.如p+i代表这样的地址计算:p+i*d,d为p所指向的变量单元所占用的字节数.这样才能保证p+i指向p下面的第i个元素. 2) 指针变量赋值 将一个变量地址赋给一个指

深入讲解C++数据类型转换的相关函数的知识

C++数据类型转换以及转换构造函数 标准数据类型之间的转换 在C++中,某些不同类型数据之间可以自动转换,例如 int i = 6; i = 7.5 + i; 编译系统对 7.5是作为double型数处理的,在求解表达式时,先将6转换成double型,然后与7.5相加,得到和为13.5,在向整型变量i赋值时,将13.5转换为整数13,然后赋给i.这种转换是由C++编译系统自动完成的,用户不需干预.这种转换称为隐式类型转换. C++还提供显式类型转换,程序人员在程序中指定将一种指定的数据转换成另一

浅谈C++的语句语法与强制数据类型转换

一个程序包含一个或多个程序单位(每个程序单位构成一个程序文件).每一个程序单位由以下几个部分组成: 预处理命令.如#include命令和#define命令. 声明部分.例如对数据类型和函数的声明,以及对变量的定义. 函数.包括函数首部和函数体,在函数体中可以包含若干声明语句和执行语句. 如下面是一个完整的C++程序: #include <iostream>//预处理命令 using namespace std; //在函数之外的声明部分 int a=3; //在函数之外的声明部分 int ma

解决易语言转换到C++ 自定义数据类型

自定义数据类型如下 .版本 2 .数据类型 数据 .成员 坐标, 坐标_数据类型 .数据类型 坐标_数据类型 .成员 x, 小数型 .成员 z, 小数型 .成员 y, 小数型 这里的自定义数据类型下的"数据"类型下的"坐标"成员引用自定义数据类型"坐标_数据类型" 子程序如下 .版本 2 .子程序 自己数据 .参数 返回数据, 数据, 参考 返回数据.坐标.x = 1 返回数据.坐标.z = 2 返回数据.坐标.y = 3 这里的子程序内的参数&

零基础易语言入门教程(四)之数据类型

我们一起了解下易语言的数据类型,跟我们现实生活是一样的,分为文本型和数值型,即是我们所说的文科生和理科生的区别. 参考文章:详解易语言中的数据类型 方法和步骤如下所示: 1.数值型(到数值命令): 使用该命令可将文本型等一类数据更改为数值型:我们来输入一行代码看看其作用: 2.到文本()命令: 我们先输入一行代码试试,见下图 3.小结: 每一行代码前后的数据类型必须转换为同一种,方可进行相连,相加,"+"在数据为文本型时是连接作用,数值型的跟数学里的符号一样. 以上所述是小编给大家介绍

解决易语言编程乱码的问题

因为易语言不支持Unicode,大家编写的程序在台湾或是香港等地使用的时候常遇到的问题就是乱码,因为那里是繁体字系统. AppLocale一款由微软出品的解决乱码的软件.微软为XP专门制作了Microsoft AppLocale这款软件,用来解决汉字的编码问题. 多语言支持工具,可以让非Unicode的软件在Windows XP/2003上运行,即可以同时执行简繁体日文等各种语言的软件:不管是日文.韩文.法文都可适用,任何文字编码的程序都借由它来正确地显示文字,享受原本只有Unicode的程序才

解决易语言调试的时候提示不能写出临时文件

小编在测试易语言程序的时候,出现过"不能写出临时文件"这个错误,在网上找了很久,总结了解决办法. 易语言的运行权限不够.找到易语言的安装目录,右键"e.exe",点击"属性".就可以了 以上的方法很简单,大家测试以下,感谢大家对我们的支持.

解决易语言支持库配置出错退出

Windows2003系统默认启用了"数据执行保护" 所以我们的易语言无法进行支持库配置,常见的表现为:执行支持库配置时候,程序意外退出,检查系统日志,没有任何日志存在. 比较好的解决办法为: 1.右击"我的电脑"-"属性"-"高级"-"性能"下的"设置"-"数据执行保护" 2.点击"添加",选择易语言的主程序位置,例如:C:\Program Fi

解决易语言多线程出错的问题

log_Content 最近在给客户写软件,发现我这边一直没有发现出错的问题,但是客户的软件一运行多线程就出错,一直找不到问题,找了好久才找到解决方法,原来是CPU的问题,多线程对于双核CPU亲和性上有问题,现在找到问题的解决方法,顺便记录一下,或许有朋友遇到同样的问题,可以一起参考. DLL命令: .版本 2 .DLL命令 SetProcessAffinityMask, 整数型, , , 公开, 设置CPU亲和性 进程句柄 返回CPU号 .参数 hProcess, 整数型 .参数 hProce

解决易语言空壳程序360误报

空壳程序定义为,程序没有任何组件,没有任何代码,没有自动的加花. 1.直接生成,被主动防御杀. 2.加入启动窗口创建完毕和启动窗口将被销毁,被主动防御杀 3.去掉勾选 配置中写入版本信息,直接生成,免杀 4.加入启动窗口创建完毕和启动窗口将被销毁,去掉勾选 配置中写入版本信息,直接生成,免杀 5.直接生成,勾选写入版本信息,但稍微添加版本信息,例如:填写了程序名称.免杀 6.加入启动窗口创建完毕和启动窗口将被销毁,勾选写入版本信息,但稍微添加版本信息,例如:填写了程序名称.免杀 结论,默认的版本

易语言自定义外形按钮实现过程

不少软件作者肯定因为易语言没有内置自定义外形按钮而烦恼,不过你却可以用其他组件来实现--用画板制作自定义外形按钮 1.新建一个"易语言"窗口程序 2.添加组件--一个画板到窗口内 为了方便定位按钮的位置 你可以把画板的宽度设置为:80,高度也设置为:80 为了清楚画板在哪里,可以把底色设置成你喜欢的颜色 3.然后就可以输入代码了 先输入变量代码,代码如下: .版本 2 .程序集 窗口程序集_启动窗口 .程序集变量 鼠标停留在画板内, 逻辑型 .程序集变量 鼠标移动在画板内, 逻辑型 .

零基础易语言入门教程(五)之逻辑型数据类型

在上篇文章给大家介绍了零基础易语言入门教程(四)之数据类型,上篇针对数值到文本类型知识,今天给大家介绍下逻辑型数据. 具体方法和步骤如下所示: 1.逻辑型数据非真即假: 首先申请一个局部变量(A)类型为:逻辑型,编写代码为:A=1>2,那么输出的结果应为假,因等于1是赋值与1,然后代码中写道1大于2,所以这是假的,见下图所示: 2.关系运算符: 在上图大家需注意的是,A后面的等于号是赋值符号,而后面的≥,≠,<一些符号则是关系运算符. 关系运算符不是非要设置变量给其赋值才可以使用的,同样他可以

易语言的即时输入提示使用方法

一:即时输入提示: 我们打开菜单"工具"→"系统配置",选择"输入"子夹,通过下面2张图的对比,我们可以看到新版易语言将以前的"提供数据类型选择列表"这个选择项修改为"即时输入提示"(如图): 旧版本系统配置对话框 新版本系统配置对话框 通过这个选项,我们可以选择在输入代码的时候是否需要有提示框. 即时输入提示框会在以下几个地方出现: 1:输入代码的时候,(如图): 2:输入返回值类型的时候,(如图): 3