反码,补码为什么又叫“一的补”,“二的补”?
王宇包子铺
2018年12月07日 20:00

反码之所以称为“反码”,是因为反码表示的负数,在形式上可以看做对其所对应正数(其相反数)的“按位求反”(将所有0换为1,1换为0),例如,十进制数6,用8位二进制数表示为00000110,则-6表示为11111001.

8位二进制数反码表示的+6,-6

这一名称十分直观地体现了反码的外貌,通俗易懂。但是“一的补”这个名字就有点让人摸不着头脑了,完全不明白是什么意思。其实,这是翻译的锅。

反码的英文叫做 Ones' complement (注意不是 One's complement),意即“(复数个)一的补”。由于汉语中名词不能通过词形变化来体现单复数,我们无法通过译名来体会这个名字的含义。仍取上面的例子,我们将反码的+6与-6按二进制加法相加,发现得到了“一串一”。

+6与-6相加得到一串“1”

仔细想想可以发现,任意一对相反数的反码的“和”都是一串一,所以我们可以这样定义负数N的n位二进制反码:

负数N的n位二进制补码

这便是反码叫做“(复数个)一的补”的原因。

然后你是不是以为“二的补”就是这样:

并不!二进制数中不会出现“2”。事实上,“二的补”,英文是 Two's complement (而不是Twos' complement),所以它是“(一个)二的补”,与“一的补”其实不是同一个意思。负数的补码的定义如下:

这里的“二”就是指上式中的“2”。

总结:

“一的补”是指“以一串一为模求补”

“二的补”是指“以二的n次幂为模求补”

封面图