一、补码是什么?
补码的发明是为了解决负数用二进制怎么表示的问题。范围再大一点是为了解决有符号数用二进制怎么表示的问题。
二、使用规则
以8位二进制为例。
规则1:
第7位为符号位,0表示正数,1表示负数。
如+3可以表示为 0000 0011,
那-3是不是可以用1000 0011表示呢?
不行!这样做最大的问题在于(+3)+(-3)!=0了。
即 0000 0011+ 1000 0011 != 0。
怎么解决呢?
规则2:
正数的补码是其本身的二进制形式;负数的补码需要先将其绝对值按位取反,再 +1。
这下,
+3的补码还是0000 0011。
-3的补码则经过了如下变化
首先-3的绝对值是3,所以其绝对值表示为1000 0011(符号位不变)
然后按位取反,表示为1111 1100(符号位不变)
最后+1,得到1111 1101
这时候0000 0011 + 1111 1101=1000 0000
怎么还是不等于0?
左边的1溢出了,在一个字节单元中,结果就是0.
参考资料
1、https://fishc.com.cn/forum.php?mod=viewthread&tid=67124&extra=page%3D1%26filter%3Dtypeid%26typeid%3D571