二进制补码与一定位数的混淆

Two's complement confusion with certain number of bits

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

签名方法:

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

到目前为止一切顺利,

现在如果我决定使用补码

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

这里显示我进位0,进位1。如果我按照下溢和上溢的规则,这应该被认为是下溢,最后应该不会得到正确答案。

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

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

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

我似乎无法弄清楚这里发生了什么,以及为什么我对这些情况中的每一个都得到了二进制补码的正确答案。

任何澄清都会有所帮助!

在5位中,10101是不是21!

设置了最高有效位,所以它是一些负数!

只有5位,10101就是-11的表示。您得到 "right" 答案是因为您实际计算的是 -11 + -10 并得到 11,这是不正确的答案,符合 over/underflow.

的规则