【问题标题】:Subtracting a value by itself using 2's complement使用 2 的补码自行减去一个值
【发布时间】:2014-08-17 17:43:03
【问题描述】:

使用2的补码减法,我的结果是1111(十进制系统中的-1),而在以下情况下它应该是0

  10010
 -10010

这两个值都以二进制形式提供。

答案似乎很明显,但是按照将负值转换为 2 的补码然后添加它的方法在这种情况下似乎不起作用,因为结果似乎是 1111。

谢谢

【问题讨论】:

    标签: binary subtraction


    【解决方案1】:

    使用 2 的补码从自身中减去一个数字意味着您添加它的 2 的补码(减去一个数字就是添加它的 2 的补码):

    您需要知道字长(以位为单位)来确定 2 的补码,因此假设一个字的位数为 8。那么您有 00010010 作为原始数字,11101110 作为其 2 的补码。 2 的补码是 1 的补码 (11101101) 加上 1

    然后添加:

     00010010   [original number, 18 decimal]
    +11101110   [2's complement, -18 decimal]
    ---------
     00000000   [note: there's a 1 overflow bit]
    

    【讨论】:

      【解决方案2】:

      二进制补码中的 10010(假设 5 位二进制补码)是 -14 (-16 +2)。 14 的二进制补码是 01110 (2+4+8)。所以

       10010
      -10010
      =
       10010
      +01110
      =
       00000 (actually 100000, but the 1 is overflowed)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-17
        • 2014-02-17
        • 1970-01-01
        • 2022-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多