在现代编程语言中,语言本身都支持一定的数据类型,称为built-in data type,也称为基本数据类型。语言中的数据类型实质上是为了便于告诉编译器应该在内存中分配多大的空间,以及运行对这个分配的空间进行什么样的操作。也就是说,对不同的数据类型,编译器会在内存中分配不同大小的空间,允许的操作也是不同。
除了基本数据类型外,还可以定义抽象数据类型。所谓抽象数据类型,就是编译器本身不认识,而是通过读取头文件中所声明的信息来学着操作的那种数据类型。例如,用户自定义的各种类等就是属于这种抽象数据类型的。
c++中的基本数据类型直接来自于c中的基本数据类型。它规定了各种基本数据类型能容纳的最大值和最小值的范围,然后编译器就会根据这些最大值,最小值规范,在内存中分配合适大小的足以容纳该范围中的所有数据的最小内存以表示这些值,这就是这些基本数据类型在内存中的实现。 基本类型的取值允许的范围在系统头文件limits.h 和float.h中声明了。
c/c++中有4种基本数据类型:char int float double。 编译器在内存中为char至少开辟8bit的内存空间来存放其值,int是16bit, 。然后通过4个关键字short ,long, signed,unsigned放在这些基本类型前面,来改变这些基本类型的范围,也就是改变其语义。基本类型定义了该基本类型的取值范围从而确定了在内存中为了能表示该范围而应该至少分配的内存的大小,而关键字则说明了所分配的这些bit应该如何使用,即那些bit表示哪个含义。
具体实现时,则只要能够满足上述语义就可以了,例如在一个64位的机器上(也就是以64bit为基本的内存分配单位的机器)可能short int,int,long int都分配了64bit,这样肯定能容纳上述语义定义的取值范围,甚至还有多余的空间。
short ,long 可以用来放在int,float,double前面,而signed,unsigned只能放在char和int前面,但是也有一些限制。具体的说,只能有: float,double,long double; short int, int, long int; signed int, unsigned int; signed char, unsigned char;这几类,其它的都是非法的。
signed ,unsigned告诉编译器是否把int/char的第一个bit看成符号位(faloat/double始终是有符号的,也就是说编译器始终将该类型的第一个bit看作符号位),如果第一个bit作为值的bit,那么就可以用来表示更大范围的非负数了。默认情况下,int是有符号的,char默认是无符号的,除非指定:signe d char。
sizeof操作符可以用来查看某个数据类型在内存中所分配的内存空间的大小(以字节为单位),编译器为了确保各种基本类型的取值范围,可能在不同的os不同的machine上会分配不同大小的bits,所以在不同环境下,sizeof的值可能是不同的。
short int ,int ,long int可以简写成:short, int, long。
s