char,short,int,long,float,double,longlong的字节
数据类型的长度跟编译器有关系,跟系统32还是64位无关,比如,32位的程序运行在64位上,仍是按照当初编译(32的编译器)出来的字节长度运行的。
char:占一个机器字节byte,一般是8位,但也出现过6位,7位,9位,12位和16位。
int:占一个机器字word,一般是32位。但也出现过8, 9, 12, 18, 24, 36, 39, 40, 48和60位。
long:占一个通用寄存器,所以32位机上是32位,64位机上是64位。指针和long一样大。
float:如果是按照IEEE的标准是32位。
double:如果是按照IEEE的标准是64位。
C++标准没有指定int类型的字节数,但是指定了最小范围。可以在从要求的范围内的位推断最小size。
对于char来说,它的大小始终是1个字节。
C++标准要求的最小范围如下:
- signed char: -127 to 127 (note, not -128 to 127; this accommodates 1’s-complement platforms)
- unsigned char: 0 to 255
- “plain” char: -127 to 127 or 0 to 255 (depends on default char signedness)
- signed short: -32767 to 32767
- unsigned short: 0 to 65535
- signed int: -32767 to 32767
- unsigned int: 0 to 65535
- signed long: -2147483647 to 2147483647
- unsigned long: 0 to 4294967295
- signed long long: -9223372036854775807 to 9223372036854775807
- unsigned long long: 0 to 18446744073709551615
C90 标准如下
sizeof(char) <=sizeof(short) <= sizeof(int) <= sizeof(long)
C99 标准
sizeof(char) <=sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long)