首页 文章

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

提问于
浏览
2

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

这是在SO here以及Wikipedia上解释的 .

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

2 回答

  • 3

    这是有效的,因为通过将所有1从右侧翻转到0直到达到0来完成向二进制数添加一个,将其翻转为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个零) .

    假设你补充它然后加一个,你首先获得y01k(其中y是x的补码),然后增量通过尾随的值并将零重新翻转到y10k .

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

相关问题