看到楼主这个问题我也困惑了,就从网上找了找,感觉这个解释比较合理
8位二进的补码组合序列有
0000 0000 - 0111 1111 0 ~ +127
1000 0000 用来干啥好呢?(表示-0,不是的,-0的原码是1000 0000 补码是
0000 0000 +0 的补码也是 0000 0000)
1000 0001 ~ 1111 1111 -1 ~ -127
全部状态为256个
再看看这个规律表
原码 补码 值
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的补码这样规定后,负数的补码在机器中就好算了。
在约定的范围内(-128 ~ +127,对16位32位64位等扩大范围)
先将该负数取绝对值,再用二进制表示出这个绝对值 (不管符号位)
对该二进制数进行取反加一操作就得到负数的补码了
-128 绝对值是 128
128的二进制表示为:
1000 0000
取反
0111 1111
加1
1000 0000
这就是-128的补码
这种办法算出的结果符合“规定值”,规定而已。
|