C/C++数据类型有多种,包括自定义数据类型(自己写的类),各种数组,vector,string等数据类型,都是数据类型,所谓数据类型是个宽泛的概念,从类和对象的思想讲,每一种数据类型都是“对象”,本篇文章则主要介绍那些最微小、最基本的数据类型,也即那些用C++关键字来声明和定义的数据类型,其他的一些数据类型,是可以由这里的基本内置数据类型来构成的。
这里介绍的这些数据类型,都是使数据以独立、分立的形式存在的。刚才提到的数组、vector等,也是数据类型,但属于是将多个独立、分离的数据组织了起来,构成了大的、组织性的数据类型,关于他们,我们以后介绍。
整型:
int
int a;
cout << sizeof(a) << endl;//4,代表4字节,4*8=32 bit,
//无论在64位还是32位系统下,都是32bit
32位,由于计算机采用补码存储数据(关于原码、反码、补码,请参照我另一篇博客),所以能表示的最大正数为:
最小复数为-2^31,即-2,147,483,648
可以近似为2*10^9,所以在做算法题时,如果题目说数据大小在-10^9到10^9,那么用int没有问题,但如果超了这个范围,那就要用long long,否则会Segementation Fault,
long int
cout << "sizeof int:"<<sizeof(int) << endl;// 4,刚才说过
cout << "sizeof long int:" << sizeof(long int) << endl;//4,和int一样也是4
无论x64 or x86,long int 和int 一样都是4字节,这显得long int 很尴尬,不过据说早期C++中int是2 字节, long int 4字节,long long 8字节,但后来新版本中发生了变化,导致现在long int没有什么用了。
long long
cout<<sizeof(long long)<<endl;//8
long long在x64和x86下都是8字节,是最长的整型,像刚才提到的,在应用中如果某变量实在太大,大过2*10^9,那就将他定义为long long型。
浮点型:
float
cout << "sizeof float:" << sizeof(float) << endl;//4
cout << "sizeof double:" << sizeof(double) << endl;//8
在32位的一个float数据中,各位的划分:
double
如上
布尔型:
bool
bool flag = true;
cout << sizeof(flag) << endl;
布尔类型只有1字节,true==1==真,false==0==假,而且在C/C++中,bool类型和整形可以发生隐式类型转换,
int a=1;
if(a==true) cout<<"bool类型可以和整形发生隐式类型转换"<<endl;
int b=0;
bool flag=true;
cout<<b+flag<<endl;// 1
也就是像上面这样写代码是没有任何问题的,true就是1,false就是0,自由转换,互相等价。
枚举型:
enum
枚举类型存在的意义在于,用枚举来做数据的标识,可以实现对数据的分类,打个比方类似于用Ture和False区分是与非,而枚举也可以在此基础上也用整形常量的方式对数据进行更多的分类
详细可参考:【C++】C++中的枚举enum类型使用详解_c++ enum-CSDN博客
字符型:
char
char c = 'c';
cout << "sizeof char:" << sizeof(char) << endl;//1
char也是1字节,用来存储一个字符。
最后你可能想提到一个数据类型:字符串,string,但我没有将他放在这里,因为我认为string是将多个char组织起来构成的,本质是char数组,跟整数数组一样,不是最基本、最微小的数据类型,而且在C中是没有string的,有了C++和STL后,string才开始被我们使用,当然字符串在生活应用和人类认知中是经常出现的一种数据类型,但在计算机中,他的地位不是最基本的,最基本的是char