使用 2 的补码的二进制算术减法的结果如何得到否定答案?

问题描述

好的,问题来了:11100111 - 110011111

我知道我们必须使用 2 的补码方法来获得正确答案,但是当我通过将 110011111 更改为 001100000 然后将其添加到 11100111 来使用它时,我得到 (1)01001000。 然而,这个问题的答案是 -10111000 [是的,这是一个否定]。

对于上述问题,我们如何使用 2 的补码方法可能得到否定结果,我真的很困惑。我搜索了堆栈溢出,但似乎没有帖子回答我的这个查询。 预先感谢您帮助我!

解决方法

任何第一位为 1 的二进制数是负数,如果它是一个有符号数,那么因为你有 (1)0111000 它是一个负值。您似乎混淆了有符号数和无符号数。

您也错误地进行了二进制补码,您应该首先从另一个二进制数中减去二进制数,然后再将其加 1。这是维基百科的一个例子

   1111 1111                       255.
 − 0101 1111                     −  95.
  ===========                     =====
   1010 0000  (ones' complement)   160.
 +         1                     +   1
  ===========                     =====
   1010 0001  (two's complement)   161.