为什么这两个补码快捷方式有效?

时间:2016-01-24 22:56:56

标签: twos-complement

形成二进制数的二进制补码的快捷方法是从右侧复制位直到复制一位,然后补充(反转)其余位。

在SO here以及Wikipedia上解释了这一点。

什么是 not 解释了为什么这个快捷方式有效,也就是说,为什么它产生与反转所有位并添加一个相同的结果。所以,我的问题是,为什么这有效?

2 个答案:

答案 0 :(得分:4)

这是有效的,因为通过将所有1从右边翻转到0来实现向二进制数字添加一个,直到达到0,将其翻转为1并停止(基本上带有添加1到1的溢出)。

因此,一个方法只翻转第一个位左边的位,而另一个方法翻转所有位,然后翻转第一个1(现在为0)和右边的位

e.g:

$> mylist = myrdd.collect()
$> for elem in mylist:
$>     print elem 

VS

 01000100
 10111100  // copy bits until a 1 is reached, then flip the rest

答案 1 :(得分:0)

将数字写为x10 k (某些字符串后跟1,然后是k个零)。

假设你补充它然后加一个,你首先获得y01 k (其中y是x的补码),然后增量通过尾随的并翻转零回到y10 k

这与仅仅补充x并留下尾巴是一回事。