我认为解决这个问题最简单的方法就是把它分成小步骤。
我的第一个假设是你试图解决 15 (1111 (binary)) - 18 (10010 (binary))
我发现在二进制补码中进行减法的最简单方法是使用method of complements,而不是尝试从正数 15 (+15 - (+18)) 中减去正数 18,而是将负数 18 添加到正 15 ( +15 + (-18) )。这具有相同的结果,但在二的恭维中更容易做到(注意:如果你的数字系统没有负数,你不能这样做)
所以我们必须取数字 15 和 -18 以及 convert them into two's complement numbers。由于 18 用 5 位二进制表示,我们需要至少使用 6 个 6 位来表示 -18 的二进制补码。
要将 -18 转换为二进制补码,我们在二进制补码 010010 中取 18 翻转这些位(将 0 变为 1,将 1 变为 0)101101,然后使用 binary addition 将翻转的位加 1
1 (carried digits)
101101 (-19 (flipped 18 ))
+ 000001 (1)
_________
101110 (-18)
要将 15 转换为二进制补码,我们将 15 取为二进制 (1111),然后在左侧添加零,直到其位数与 -18 (101110) 001111 相同
既然我们都是二进制补码,我们可以使用binary addition 将它们加在一起
111 (carried digits)
001111 (15)
+ 101110 (-18)
_________
111101 (-3)
这给了我们 -3 的二进制补码,这是正确的答案 (15 - 18 = -3)。
您可以通过 twos complement wiki page 了解二进制补码