数据类型 | 字节大小 | 可存储的数据大小 |
unsigned char | 1B | 0~255 |
unsigned short | 2B | 0~65535 |
unsigned int | 4B | 0~4,294,967,295 |
unsigned long | 4B | 0~4,294,967,295 |
unsigned long long | 8B | 0~18,446,744,073,709,551,615 |
...... | ....... | ...... |
B:字节(Byte),数据存储的最小单位
b:位(bit), 一字节有八位 1B=8b
无符号整型数据大小的计算方法:
以unsigned char 来举例:
unsigned char大小是一字节,有8b,8b全部用来存储数据
最小情况,八位全是 0:
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
十进制的值:0*2^7 + 0*2^6 + 0*2^5 + 0*2^4 + 0*2^3 + 0*2^2 + 0*2^1 + 0*2^0 = 0
最大情况,八位全是1:
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
十进制的值:1*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 255
公式总结:2^8-1 = 255(这里的8,因为unsigned是一字节是八位,换成int,四字节,4*8 = 32 ,把8变成32 即可)
所以unsigned char 的范围是 0~255,其他类型用这种方法计算也可
接下来是有符号整型数据类型:
数据类型 | 字节大小 | 可存储的数据大小 |
char | 1B | -128-127 |
short | 2B | - 32768~32767 |
int | 4B | -2147483648 - 2147483647 |
long | 4B | -2147483648 - 2147483647 |
long long | 8B | -2^63-2^63-1 |
...... | ....... | ...... |
有符号整型数据大小的计算方法:
以char 来举例:
unsigned char大小是一字节,有8b,8b全部用来存储数据,有符号整型第一位是符号位:
第一位是1:则表示为负数,其余位数是数据:
1 | * | * | * | * | * | * | * |
第一位是0:则表示为正数,其余位数是数据:
0 | * | * | * | * | * | * | * |
所以数据位只有7位
最小情况:-2^7:-128
这里要注意,计算机中的数是以补码的方式进行存储,所以要把负数的源码转化为补码,但是正数为什么不用呢?因为正数的补码,反码就是原码本身。
首先变成反码:
符号位要保持不变,就是第一位不变,其他位取反:
末尾加1然后变成补码
最大情况:2^7-1 = 127
其他类型用这种方法计算也可