如何从二进制中减去较小的数字?
How to subtract from a smaller number in binary?
我有两个号码。负数用2的补码翻译。
a = 160 = A0 = 1010 0000
b = -28 = E4 = 1110 0100
而且我必须执行以下操作a - b
。我一直用借到最后一点,但后来我遇到了这样的情况。
0 1
- 1 1
---
? 0
我应该借用虚构的东西吗?在十进制中1 - 3 = -2
,所以答案是BC
,但是你如何推理这里的负数2
?
如果你在做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的补码加起来而不是减去。
8bit 2 与原始二进制文件的补码:
1010 0000
+ 1110 0100
---------
11000 0100
结果是 1000 0100
即 -124
(-96 - 28)。
我有两个号码。负数用2的补码翻译。
a = 160 = A0 = 1010 0000
b = -28 = E4 = 1110 0100
而且我必须执行以下操作a - b
。我一直用借到最后一点,但后来我遇到了这样的情况。
0 1
- 1 1
---
? 0
我应该借用虚构的东西吗?在十进制中1 - 3 = -2
,所以答案是BC
,但是你如何推理这里的负数2
?
如果你在做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的补码加起来而不是减去。
8bit 2 与原始二进制文件的补码:
1010 0000
+ 1110 0100
---------
11000 0100
结果是 1000 0100
即 -124
(-96 - 28)。