是的!没错!
将-20 添加到20 将得到0,结果是1。如果您选择任何小于20 的正数,则不会生成进位,结果将为负数。如果您选择任何大于20 的正数,它将生成一个带有正数结果的进位。所以20 是您正在寻找的答案。
如果你真的想深入到二进制细节,你可以一步一步来:
- 我们正在寻找一个将添加到
-20 并生成结转的数字,让我们用x 表示它,y 将是结果,c 将是结转.
11101100
+ xxxxxxxx
--------
cyyyyyyyy
- 我们正在寻找
c = 1,我们知道X is positive,所以它的最高位是0
11101100
+ 0xxxxxxx
--------
1yyyyyyyy
- 现在我们可以清楚地看到,我们可以从第 7 位获得进位的唯一方法是从第 6 位获得进位。所以
y[6] = 0。
11101100
+ 0xxxxxxx
--------
10yyyyyyy
- 有两种方法可以生成进位位
6。 x[6] 是一个。或者第 5 位有进位。我们想最小化x,所以我们应该选择x = 0 并从位5 进位。
11101100
+ 00xxxxxx
--------
10yyyyyyy
- 这同样适用于位
5。我们可以在x[5] = 1 或位4 的进位之间进行选择。我们应该从位 4 进位,因为我们必须最小化 x。
11101100
+ 000xxxxx
--------
10yyyyyyy
- 现在我们除了设置
x[4] = 1 之外没有任何其他选项,因为如果 x[4] = 0 将不会有进位传播到更高位。
11101100
+ 0001xxxx
--------
10yyyyyyy
- 我们又回到了 4.
x[3] = 0 以最小化 x。
11101100
+ 00010xxx
--------
10yyyyyyy
- 最后我们得到了操作数的最后一个
1。这是我们产生进位的最后机会。如果我们选择x = 0,则不会执行。我们唯一的选择是x = 1。
11101100
+ 000101xx
--------
10yyyyyyy
-
x 的最后两位应该是0,因为我们再次最小化x。
11101100
+ 00010100
--------
10yyyyyyy
- 结果是……(带有进位指示)
11111
11101100
+ 00010100
--------
100000000
哒哒!