我有两个号码。负面的一个是用2的补码翻译的。
a = 160 = A0 = 1010 0000
b = -28 = E4 = 1110 0100
我必须执行以下操作a - b
。我使用借用到最后一点,但后来我遇到了类似的情况。
0 1
- 1 1
---
? 0
我应该借用想象中的东西吗?在十进制1 - 3 = -2
中,答案为BC
,但您如何推断这里的否定2
?
答案 0 :(得分:1)
如果您正在进行2的补码计算,则两个数字都是2的补码,因此A0
等于小数-96
而不是160
。
160
在8位2的补码中无法表示。我将在这里使用9bit 2的补码。
a - b
其中a=160
和b=-28
等于160 + 28
。这就是你想要的吗?
0 1010 0000
+ 0 0001 1100
-------------
0 1011 1100
或者您想要计算160 - 28
?这等于160 + (-28)
0 1010 0000
+ 1 1110 0100
-------------
10 1000 0100
我们可以忽略左边1,因为我们正在做9bit 2的补码计算。结果是0 1000 0100
132
。
这是2的补码的优点,你不必做减法,你可以加上2的补码而不是减去它。
原始二进制文件的8位2补码:
1010 0000
+ 1110 0100
---------
11000 0100
结果为1000 0100
,即-124
( - 96 - 28)。