如何从二进制中减去较小的数字?

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=160b=-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 0100132.

这就是2的补码的优点,不用做减法,可以把数的2的补码加起来而不是减去。

8bit 2 与原始二进制文件的补码:

  1010 0000
+ 1110 0100
  ---------
 11000 0100

结果是 1000 0100-124 (-96 - 28)。