转载自https://www.cnblogs.com/flowerslip/p/5933833.html
三.-128的补码为什么是1000 0000
8位二进制的原值表达范围为:-127至127
共有256个组合序列 0000 0000 至1111 1111 。
+128的原值在8位中是表达不出来的。
下面从两个角度理解-128的补码为什么是1000 0000.
(1)从补码的意义上去理解
因为:256-128=256+(-128)的补码 --机器中只有加法。减法会变成补码的加法。
而 256-128=128
所以 256+(-128)的补码=128
所以 (-128)的补码=256-128
=128
数学上, 128=1000 0000
故规定-128的补码为 1000 0000
注意:只是规定而已,下面还有原因。
8位二进制 的补码组合序列有256个
0000 0000 - 0111 1111 0 ~+127
1000 0000 用来干啥好呢?
1000 0001 - 1111 1111 -1~-127
再看看这个规律表
原码 补码 值
0111 1111 0111 1111 +127
0111 1110 0111 1110 +126
… … 补码不断-1…
0000 0000 0000 0000 0
1000 0001 1111 1111 -1
1000 0010 1111 1110 -2
1000 0011 1111 1101 -3
… … 补码不断-1…
1111 1111 1000 0001 -127
无法表达 1000 0000 -128
于是就有了规定 1000 0000 定为 -128的补码
这种定法和上面数学层面的表述是一致的。
这样规定后,负数的补码在机器中就好算了。