0

我正在研究二的补码加法。基本上我需要显示 -27 到 +31 的加法,两个数字都是使用 6 位的二进制数。

我的问题是进位操作。也许我做得不对或其他什么。

-27 二进制:111011
+31 二进制:011111

我认为的答案应该是:
+4 是二进制:000010

这就是我正在做的事情:

Carry  1 1 1 1 1  
- 27   1 1 1 0 1 1
+ 31   0 1 1 1 1 1
-------------------------
Sum:   0 1 1 0 1 0

在我看来,这是 52 而不是 4。

我究竟做错了什么?

4

2 回答 2

3

你的数学是错误的。

27 是0 1 1 0 1 1二进制的(注意我为符号添加的前导 0)

-27 是1 0 0 0 1 1二进制补码。

当你用这个做数学运算时,你应该得到正确的结果。


这是快速执行二进制补码的“技巧”。

从 LSB 开始,准确地复制数字,直到遇到第一个零,然后也复制该零。之后,翻转所有位,直到 MSB。

这相当于翻转所有位(一个补码)并添加一个(将其变成二进制补码),但只需一步。

于 2011-08-29T05:06:08.010 回答
1

嗯,没错31 - 27 = 4!:)

4 is 100但是在二进制中,你确定吗-27 is 111011???

于 2011-08-29T05:07:03.740 回答