触发执行的最小正数

Smallest positive number to trigger carry out

我正在学习计算机体系结构课程,并且有以下练习:

What is the smallest positive decimal number that should be added to -20 so that a carry-out is triggered (in 2 complement's notation)?

我解决了这个练习,但我不确定我的结果。所以我发现了这个:

先将-20转为2补二进制。这给出 -20 = 11101100。现在添加 000101000 以触发进位。相当于 20.

这样对吗?

是的!没错!

-20 添加到 20 将得到 0 作为结转 1 的结果。如果您选择小于 20 的任何正数,则不会生成进位,结果将为负数。如果您选择任何大于 20 的正数,它将生成带正结果的进位。所以20就是你要找的答案。

如果你真的想深入二进制细节,你可以一步一步来:

  1. 我们正在寻找一个将添加到 -20 并将生成进位的数字,让我们用 x 表示它, y 将是结果 c 将是结转。
      11101100
    + xxxxxxxx
      --------
     cyyyyyyyy
  1. 我们正在寻找 c = 1 并且我们知道 X is positive 所以它的最高有效位是 0
      11101100
    + 0xxxxxxx
      --------
     1yyyyyyyy
  1. 现在我们可以清楚地看到,从位 7 获取进位的唯一方法是从位 6 获取进位。所以 y[6] = 0.
      11101100
    + 0xxxxxxx
      --------
     10yyyyyyy
  1. 我们可以通过两种方式生成进位 6x[6] 是一个。或者从第 5 位有一个进位。我们想要最小化 x,所以我们应该选择 x = 0,从位 5 进位。
      11101100
    + 00xxxxxx
      --------
     10yyyyyyy
  1. 5也是如此。我们可以选择 x[5] = 1 或位 4 的进位。我们应该从位 4 开始进位,因为我们必须最小化 x.
      11101100
    + 000xxxxx
      --------
     10yyyyyyy
  1. 现在我们除了设置 x[4] = 1 没有任何其他选项,因为如果 x[4] = 0 将没有进位传播到更高位。
      11101100
    + 0001xxxx
      --------
     10yyyyyyy
  1. 然后我们回到与 4 相同的状态。x[3] = 0 以最小化 x
      11101100
    + 00010xxx
      --------
     10yyyyyyy
  1. 最后我们到达了操作数的最后一个1。这是我们产生进位的最后机会。如果我们选择 x = 0 则不会有进位。我们唯一的选择是 x = 1.
      11101100
    + 000101xx
      --------
     10yyyyyyy
  1. x 的最后两位应该是 0,因为我们再次最小化 x
      11101100
    + 00010100
      --------
     10yyyyyyy
  1. 结果是...(带进位)
      11111
      11101100
    + 00010100
      --------
     100000000

哒哒!