因此,假设我想使用 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。我做错了什么?
因此,假设我想使用 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。我做错了什么?
沿着这条线的某个地方,您丢失(并且一直丢失)进位标志:
+- 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)。
你的数学是错误的。在位置 5 中添加 1 + 1 得到 10,因此携带 1。在下一列中,您需要添加 1 + 1 + 进位,= 11 = 1 + 进位。
当您考虑到这一点时,您最终会得到 1 1 1 1 0 0 1 0 = -14。