K&R C 标准中并没有规定长整数一定比短整数长,但是规定一定不能比短整数短,即 long 和 short 在K&R C标准中,可以一样长
而在ANSI标准有一个进步,出于可移植性的考虑,明确了各种整型数据类型的最小容纳范围,但对于浮点数没有太多的要求,只规定:
- long double 至少和 double一样长
- double至少和 float一样长
- 且所有浮点数都能容纳10-37—1037之间的任何值
基于标准,C语言的基本数据类型的真正的长度是由宏定义确定的
- 头文件 limits.h 通过宏定义说明了char、short、int、long 变量范围的限制
- 头文件 float.h(这个有兴趣可以自己看下,看了几眼有点晕)
这样就有:
- 内存占用位数如下:
- char:8bits
- int: 32bits
- short int:16bits
- long int
- 64位:64bits
- 32位:32bits
- float:32bits
- double:64bits
- 最小容纳范围如下:
- unsigned char: 0到255
- signed char:-128到127
- unsigned int:0到4294967295
- signed int:-2147483648到2147483647
- unsigned short int:0到65535
- signed short int:-32768到32767
- unsigned long int:
- 64位:0到18446744073709551615
- 32位:0到4294967295
- signed long int:-9223372036854775808到9223372036854775807
- unsigned long long int:0到18446744073709551615
- 至于 char、short、int、long int 要看编译器默认编译成 unsigned 还是 signed 了