为什么二进制数的补码等于按位取反再加1

如题所述

哪有什么“按位取反加一”!

-128,并没有原码和反码,拿什么取反呢?拿什么加一?

补码,就是补码,与原码反码符号位,并无任何关系。

求补码,有它自己的“补码定义式”:

 当 X >= 0,  [ X ]补 =  X;     零和正数不用变换。

 当 X < 0,  [ X ]补 =  X + 2^n。 n 是补码的位数。

这是通用的公式。 一般的书上,都有这种公式,去翻翻书吧。

--------------------------

如果说“取反加一”,就应该是【绝对值取反加一】!

下面用 4 位二进制数来说明。

假设一个负的二进制数是:X =-xxxx。

其中的 xxxx,是二进制的绝对值,这就是一个正数。

按公式,[ X ]补 =  X  +  2^4,

二进制就是:  = -xxxx + 1 0000。

式中的 1 0000,可以写成:1111 + 1。

代入后,[ X ]补 = 1111-xxxx + 1。

式中的 1111-xxxx:

  如果 x 是 0, 1-x 就是 1。

  如果 x 是 1, 1-x 就是 0。

  所以,1111-xxxx,就是【对绝对值取反】。

式中的 + 1:

  就是在取反之后,再加上 1。

因此, X 的补码就是:【对绝对值取反、加一】。

--------------------------

在这里,既没有用原码,也没有用反码。更没有“符号位不变”。

所以,求补码,与“原码、反码和符号位”没有任何关系。

其实,原码反码符号位,都是无用的。

特别是-128,它根本就没有原码和反码!

只有用【对绝对值取反加一】,才能求出-128 的补码。

那么,书上,总是讲“原码反码符号位”,有什么意思呢?

真是怪事。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-06-14

昨天聊到了补码的问题:在4进制中,原码1的补码是3。减去原码和加上补码的结果是一样的。大学时候,对于二进制数,求补码有个口诀: 按位取反再加一

为什么呢?还是以4进制为例,为了直观起见,还是先把图贴上。

补码又可以表示为 进制能表达的最大数减去原码再加一 ,对于二进制表现形式能表达的最大数(不考虑负数)是多少? 3 。写成2进制是11。

因为3的每一位都是1,所以减去另一个数字时,跟取反的结果是一样的。剩下的例子也就不再赘述了。

还有一个在已知补码的情况下,还有一个获得原码的口诀叫: 按位取反再加一

相似回答