从负数中减去正数 - 二进制补码
Taking away a positive number from a negative - Two's Complement
使用二进制补码形式,我需要用 8 位执行以下操作:
- -20 减去 45。
您可以问的另一种方式是说 "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
使用二进制补码形式,我需要用 8 位执行以下操作:
- -20 减去 45。
您可以问的另一种方式是说 "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