“反码加一”只是补码所具有的一个性质,不能被定义成补码。

负数的补码,是能够和其相反数相加通过溢出从而使计算机内计算结果变为0的二进制码。

这是补码设计的初衷,具体目标就是让1+(-1)=0,这利用原码是无法得到的

这篇文章将会介绍原码、反码、补码的定义,以及补码的计算方法。

原码

最高位为符号位,0表示正数,1表示负数。

例如:
X = 0b11 (3),四比特表示原码 = 0011(3) ;

X = - 0b11(-3) ,四比特表示原码 = 1011(11) ;

反码

最高位为符号位,0表示正数,1表示负数。

正数的反码等于本身,负数的反码除符号位外,各位取反:

例如:
X = 0b11 (3),四比特表示原码 = 0011(3),对应反码为 = 0011(3) ;

X = - 0b11(-3) ,四比特表示原码 = 1011(11),对应反码为 = 1100(12) ;

补码

最高位为符号位,0表示正数,1表示负数。

正数的补码等于本身,负数的补码等于反码+1:

例如:
X = 0b11 (3),四比特表示原码 = 0011(3),对应反码为 = 0011(3) ,补码为 = 0011(3);

X = - 0b11(-3) ,四比特表示原码 = 1011(11),对应反码为 = 1100(12),补码为1101(13) ;

示例

1补 (0001) + -1补(1111) = (1 0000)

详细参见:https://zhuanlan.zhihu.com/p/376848035