十六进制二进制补码算术

时间:2013-09-04 03:30:57

标签: subtraction hex twos-complement base-conversion

我正在尝试执行以下问题:

 E8B2035D
-FB60528D
----------

其中,表示的整数是32位二进制补码二进制数的十六进制表示。解决此问题和检测溢出的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

使用二进制补码时减法成为加法。所以我会取第二个数字的补码,然后加上它们:

如你所知,数字的两个补码首先将每1转为0,反之亦然(方便的经验法则:做15 - 数字,所以F - > 0,E - > 1,D - > 2等):

FB60528D --> 049FAD72

然后在数字中添加一个(在这种情况下,2 + 1 = 3,并且没有进位):

049FAD73 -- the two's complement of FB60528D

现在我们使用传统的添加规则添加数字:

E8B2035D
049FAD73 +
----------

D + 3 = 10 : write 0, carry 1
1 + 5 + 7  : write D, carry 0
3 + D = 10 : write 0, carry 1
1 + 0 + A  : write B, carry 0
2 + F      : write 1, carry 1 
1 + B + 9  : write 5, carry 1
1 + 8 + 4  : write D, carry 0
E + 0      : write E

最终结果(仍然是两个补码)是

ED51B0D0

如果最后一次计算导致进位(数字> F),您会检测到溢出。