8位补码范围是 -128至127.
根据补码的几条规定即可推出上述结论:
1 若二进制每位全为0,则表示数0
2 若最高位(即符号位)为0,表示正数
3 若最高位为1, 表示是负数,而该负数的绝对值是多少呢?将每个二进制位(包括符号位)取反加1,得到一个二进制数,将该数看成无符号数,其值就是上述负数的绝对值。
例如,二进制的 10000000 的最高位为1, 所以它表示的是负数。是负的多少呢?我们将其八位全部取反,得到01111111, 然后加1,得到10000000. 将该数看作无符号数,值为128, 故计算机中的10000000表示的是-128。【关于这一点要死记硬背了,可以参考下面列出的对比数记忆】
最高位(即符号位)为1的8位有符号数有128个,故可表示128个负数;最高位为0的8位有符号数有128个,但全0的那个表示数0,所以总共只能表示127个正整数。
具体列出如下,对比看一目了然:
十进制:0(正零、负零都一样,就一个零)
00000000--------0
十进制正数:(从0_0000001到0_1111111共127个数,所以最大正数是127)
0_0000001--------(1)
0_0000010--------(2)
0_0000011--------(3)
................
0_1111111--------(127)
十进制负数:(从0_1111111到0_0000000共128个数,所以最大负数是-128)
1_1111111--------(-1)
1_1111110--------(-2)
1_1111101--------(-3)
................
1_0000000--------(-128) 这是最小的数
记忆办法:首先,除去符号位,数的个数都是从全7个0到全7个1。其次,正数和负数范围都是7位,只不过负数从全7个0到全7个1共128个数,而正数由于全7个0被零占去了,所以从0_0000001到全7个1共127个数。