1

因此,假设我想使用 2s 补码二进制表示法将 -7 和 -7 加在一起。我试过这个:

-7 -> -00000111 -> 11111001
  1 1 1 1 1 0 0 1
+ 1 1 1 1 1 0 0 1
__________________
1 0 0 0 0 0 0 1 0

但删除多余的数字后,我得到 00000010 = 2 而不是 11110001 = 14。我做错了什么?

4

2 回答 2

4

沿着这条线的某个地方,您丢失(并且一直丢失)进位标志:

          +- Here, 1 + 1 = 0 and sets carry to 1
          |   (everything up to here isokay).
          v
  1 1 1 1 1 0 0 1
+ 1 1 1 1 1 0 0 1
__________________
1 1 1 1 1 0 0 1 0
| | | ^ ^
| | | | |
| | | | +- Here, 1 + 1 + carry(1) is 1, not 0.
| | | +--- Ditto.
| | +----- And again.
| +------- Now it's just getting tedious.
+--------- Lastly, here is the final carry, just discard.

11110010反(反转位并加 1)给你00001110,这绝对是 14 (8 + 4 + 2)。

于 2013-01-30T03:55:45.507 回答
1

你的数学是错误的。在位置 5 中添加 1 + 1 得到 10,因此携带 1。在下一列中,您需要添加 1 + 1 + 进位,= 11 = 1 + 进位。

当您考虑到这一点时,您最终会得到 1 1 1 1 0 0 1 0 = -14。

于 2013-01-30T03:54:36.133 回答