从负数中减去正数 - 二进制补码

Taking away a positive number from a negative - Two's Complement

使用二进制补码形式,我需要用 8 位执行以下操作:

您可以问的另一种方式是说 "take 45 away from -20 or '-20 - 45'" 或再次不同是“-20 + -45”。

我的想法是,我应该得到 -20 (11101100) 的二进制补码,然后将它与 -45 (11010011) 的二进制补码相加,反之亦然。那会给我:

  1110 1100
  1101 0011
= 1111 1111

这显然是不正确的。我做错了什么?

你的错误在于第二个 MSB - 你将 1+1 添加为 1,实际上 + 基本上是异或运算,所以 1+1 应该是 0,然后你携带了 1。

-20 + -45是正确的计算方式,应该是:

  1
  1110 1100
  1101 0011 
  ---------
= 1011 1111

基本上,对于 MSB,您得到的 1+1+1 相当于 0+1(或 1+0),当然也就是 1

因此你得到了 10111111,十进制为 -65

-2^7 + 2^5 +2 ^4 + 2^3 + 2^2 + 2^1 + 2^0
= -128 + 32 + 16 + 8 + 4 + 2 + 1
= -65