已测试;
32位下:
bool 1个字节 0/1。 BOOL 4个字节 TRUE/FALSE/ERROR。 char 1个字节 -128~127 unsigned char 1个字节 0~255 short 2个字节 -32768~32767 unsigned short 2个字节 0~65535 int 4个字节 -2147483648~2147483647 unsigned int 4个字节 0~4294967295 long 4个字节 -2147483648~2147483647 unsigned long 4个字节 0~4294967295 long long 8个字节 -9223372036854775808~9223372036854775807 unsigned long long 8个字节 0~18446744073709551615
指针 4个字节
浮点数:
类型 | 位数(字节数) | 有效数字 | 数值范围 |
float | 32(4) | 6~7 | -3.4*10^38~+3.4*10^38 |
double | 64(8) | 15~16 | -1.7*10^-308~1.7*10^308 |
long double | 96(12) | 18~19 | -1.2*10^-4932~1.2*10^4932 |
关于double的超大取值范围:因为double类型是浮点数,这种类型可以用科学记数法表示,所以表示范围非常大。但是,使用可浮点数的代价就是损失了精度。它把这部分精度用于指数的表示。所以double类型的优点就是数据范围大,缺点是精度不足,大概只有15~16位有效位数。
注意:占多少个字节是由编译器决定的,ANSI标准定义int是占2个字节.TC是按ANSI标准的,它的int是占2个字节的.你可以在TC里试.printf("%d",sizeof(int));结果是2;但是在VC里,一个int是占4个字节的,在VC里面,printf("%d",sizeof(int));cout<<sizeof(int);结果都是4.不同的编译器,规定也不一样.float,double也是一样的,在不同的编译器里,占的字节是不一样的