这个“二进制补码快捷方式”为什么有效?

5
一种形成二进制数的补码的快捷方法是从右边开始复制位,直到复制了一个1位,然后取反(反转)剩余的位。这在SO上这里和维基百科上这里都有解释。
但是,没有解释为什么这个快捷方式有效,也就是说,为什么它产生与反转所有位并加一相同的结果。因此,我的问题是,为什么这有效?
3个回答

6
它之所以有效,是因为将二进制数加一的过程是将所有右侧的1翻转为0,直到达到一个0,将其翻转为1并停止(实际上是将1加1时的溢出进位)。
因此,一种方法只翻转第一个1左侧的位,而另一种方法则翻转所有位,然后将第一个1(现在是0)及其右侧的位翻转回来。
例如:
 01000100
 10111100  // copy bits until a 1 is reached, then flip the rest

vs

 01000100
 10111011  // invert all bits:
+       1  // add one
 10111100

0

将数字写成x10k(一些位后跟着1,然后是k个零)。

假设你对它进行补码,然后加上1,你会得到y01k(其中y是x的补码),然后增量通过尾随的1传递并翻转0回来,变成y10k

这与仅对x进行补码并保留尾部相同。


0
所以我发现了一个快捷方式; 注意:如果你被允许使用带有二进制至十进制转换的计算器,那么这个技巧是可行的。 如果有一道多项选择题,像这样; Q)5的8位2补码表示为..... ,请使用公式= 2^(位数) - 数字 在这种情况下,它是8位和数字5 所以; (2^8) - 5 2^8 = 256 256-5 = 251 再用计算器将251转化为二进制 然后=二进制中的11111011。 对于任何数字和位数均适用。

1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
1
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - MD. RAKIB HASAN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接