两个补码与一定数量的比特混淆

时间:2015-02-20 20:54:38

标签: twos-complement

假设我有21 - 10 =十进制10。

签名方法:

 10101
- 1010
 -----
 1011 = 11 (in decimal)

到目前为止一切顺利,

现在如果我决定使用两个补码

     (0) 
      10101 (21)
    + 10110 (-10)
      -----
  (1) 01011 = (11)

这里显示我有一个零进位并执行一个。如果我遵循下溢和溢出的规则,这应该被视为下溢,并且最终不应该得到正确的答案。

但是,如果我决定再添加一个位来使用:

     (1)
      010101 (21)
    + 110110 (-10)
      -----
  (1) 001011 = (11)

在这种情况下,我得到正确的答案,没有溢出。

我似乎无法弄清楚这里发生了什么,为什么我会以两个补码的形式得到每个案例的正确答案。

任何澄清都会有所帮助!

2 个答案:

答案 0 :(得分:2)

在5位中,10101 21!

设置了最重要的位,因此它是一些负数!

答案 1 :(得分:2)

只有5位,10101是-11的表示。你得到了“正确”的答案,因为你实际计算的是-11 + -10并得到11,这是不正确的答案,与上下溢规则一致。