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个正整数。
二进制补码运算公式:
-x = ~x + 1 = ~(x-1)
~x = -x-1
-(~x) = x+1
~(-x) = x-1
x+y = x - ~y - 1 = (x ¦y)+(x&y)
x-y = x + ~y + 1 = (x ¦~y)-(~x|y)
x^y = (x ¦y)-(x&y)
x ¦y = (x&~y)+y
x&y = (~x ¦y)-~x
x==y: ~(x-y ¦y-x)
x!=y: x-y ¦y-x
x < y: (x-y)^((x^y)&((x-y)^x))
x <=y: (x ¦~y)&((x^y) ¦~(y-x))
x < y: (~x&y) ¦((~x ¦y)&(x-y))//无符号x,y比较
x <=y: (~x ¦y)&((x^y) ¦~(y-x))//无符号x,y比较。