Type | Size/byte(字节) | 数值范围 |
---|---|---|
void | 0 | 无值域 |
bool | 1 | true false |
short [int] / signed short [int] | 2 | -32768~32767 |
unsigned short [int] | 2 | 0~65535 |
int / signed [int] | 4 | -2147483648~2147483647 |
unsighed [int] | 4 | 0~4294967295 |
long [int] / signed long [int] | 4 | -2147483648~2147483647 |
unsigned long [int] | 4 | 0~4294967295 |
long long | 8 | |
char / signed chat | 1 | -128~127 |
unsigned char | 1 | 0~255 |
wchar_t(unsigned short) | 2 | 0~65535 |
float | 4 | -3.4E-38~3.4E+38 |
double | 8 | -1.7E-308~1.7E+208 |
long double | 8 |
有几点要说明下:
1 机器数:
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
00010000就是机器数。
2 真值:
将带符号位的机器数对应的真正数值称为机器数的真值。
00010000的真值就是32;10000001的真值是-1。
3 计算机里采用补码表示:
例如 原码=00010000 原码=10000001
反码=00010000 反码=11111110
补码=00010000 补码=11111111
4 char的所占byte为1,所以char是8位二进制数,所以对应的最大最小值如下:
-128=-(127+1) -127 0 127 128=127+1
原码 10000000 11111111 00000000 01111111 10000000
反码 11111111 10000000 01111111 01111111 10000000
补码 10000000 10000001 00000000 01111111 10000000
128的机器数最高位为1与其本身是负数矛盾,而-128的补码10000000是唯一的,所以char的范围为-128~127。其他数据类型同理。
5 关于long和int
16位系统:long是4字节,int是2字节。
32位系统:long是4字节,int是4字节。64位系统:long是8字节,int是4字节。
6 关于float和double
浮点数在机内用整数型表示,分为:数符,尾数,指数符,指数。
这里呢float 数符+尾数 24位,指数符+指数8位;
double 数符+尾数 48位,指数符+指数16位。