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

Binary 如何从二进制的较小数字中减去?,binary,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不能用8bit 2的补码表

我有两个号码。负数用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
不能用8bit 2的补码表示。我将在这里使用9位2的补码

a-b
其中
a=160
b=-28
等于
160+28
。这就是你想要的吗

  0 1010 0000
+ 0 0001 1100
-------------
  0 1011 1100
还是要计算
160-28
?这等于
160+(-28)

我们可以忽略左1,因为我们正在进行9位2的补码计算。因此结果是
0 1000 0100
,即
132

这是2的补码的优点,你不必做减法,你可以把2的补码加到数字上而不是减去它

8比特2与原始二进制文件的补充:

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

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

为什么我们需要8位2的补码?这不是160-28的正确答案,对吗?@Jwan622我们不想在这里使用8位2的补码,因为160在8位2的补码中不可表示。因此,使用(错误的)8位2的补码值160(实际上是-96)将给出错误的结果。
  1010 0000
+ 1110 0100
  ---------
 11000 0100