【问题标题】:Why does this two's complement shortcut work?为什么这个二进制补码快捷方式有效?
【发布时间】:2016-05-01 04:08:29
【问题描述】:

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

SO hereWikipedia 对此进行了解释。

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

【问题讨论】:

    标签: twos-complement


    【解决方案1】:

    它之所以有效,是因为向二进制数加一是通过将所有 1 从右侧翻转为 0 直到到达 0,将其翻转为 1 并停止(本质上是进行加 1 加 1 的溢出)来完成的。

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

    例如:

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

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

    【讨论】:

      【解决方案2】:

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

      假设你对它进行补码然后加一个,你会得到第一个 y01k(其中 y 是 x 的补码),然后增量通过尾随的值并将零翻转回来, 到 y10k.

      这与只补充 x 并不理会尾巴是一回事。

      【讨论】:

        【解决方案3】:

        所以我找到了一条捷径; 注意:如果允许您使用具有二进制到十进制转换功能的计算器,则此技巧有效。 如果有类似的 MCQ 问题; Q) 5 的 8 位 2 的补码表示是 .... ,使用公式 = 2^(位数) - 数量 在这种情况下,它的 8 位和数字 5 所以; (2^8) - 5 2^8=256 256-5= 251 使用计算器将 251 转换为二进制 然后 = 11111011 二进制。 适用于关于位数的任何数字。

        【讨论】:

        猜你喜欢
        • 2011-10-14
        • 2019-03-11
        • 2018-06-30
        • 1970-01-01
        • 1970-01-01
        • 2021-06-05
        • 2017-02-27
        • 2010-10-13
        • 1970-01-01
        相关资源
        最近更新 更多