这个问题可以拓展,在8位整数机器中,为什么只有补码可以表示-128呢?
这里先看小数定点机,8位小数定点机中的数据表示:
S.XXXXXXX
S是正负符号位,后面的7个X是数值位。
如下都以8位二进制的小数定点机为例展开
原码: 实例1,二进制的0.1010000 = +( 1/2 + 1/8) =0.625
实例2,二进制的1.1010000 = -( 1/2 + 1/8) =-0.625
同上,结合上例8位小数定点机数据格式:S.XXXXXXX
根据原码的含义,1.0以至于-1.0都超出了小数定点机的表示能力。由于原码表示不了1.0以至于-1.0,所以,反码也表示不了1.0和-1.0。那么按道理,补码应该也表示不了-1.0吧?
其实是可以的,不单可以表示-1.0,而且根据从原码到补码的计算规则的逆规则,补码必须能够表示-1.0
原因如下图: