各种类型数据位数:
已测试:
类型 | 32位占用字节 | 32位取值范围 | 64位占用字节 | 64位取值范围 |
bool | 1个字节 | 0/1。 | 1个字节 | 0/1。 |
BOOL | 4个字节 | TRUE/FALSE/ERROR。 | 4个字节 | TRUE/FALSE/ERROR。 |
char | 1个字节 | -128~127 | 1个字节 | -128~127 |
unsigned char | 1个字节 | 0~255 | 1个字节 | 0~255 |
short | 2个字节 | -32768~32767 | 2个字节 | -32768~32767 |
unsigned short | 2个字节 | 0~65535 | 2个字节 | 0~65535 |
int | 4个字节 | -2147483648~2147483647 | 4个字节 | -2147483648~2147483647 |
unsigned int | 4个字节 | 0~4294967295 | 4个字节 | 0~4294967295 |
long | 4个字节 | -2147483648~2147483647 | 8个字节 | -9223372036854775808~9223372036854775807 |
unsigned long | 4个字节 | 0~4294967295 | 8个字节 | 0~18446744073709551615 |
long long | 8个字节 | -9223372036854775808~9223372036854775807 | 8个字节 | -9223372036854775808~9223372036854775807 |
unsigned long long | 8个字节 | 0~18446744073709551615 | 8个字节 | 0~18446744073709551615 |
pointer(指针) | 4个字节 | 8个字节 | ||
浮点数32位与64位占用字节数和取值范围一致 | ||||
类型 | 位数(字节数) | 有效数字 | 数值范围 | |
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 | |
注意,C语言标准没有精确定义long double的大小,而是留给编译器具体实现的自由。真正开发过程中很少会用long double类型。 |
关于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也是一样的,在不同的编译器里,占的字节是不一样的