要触发执行的最小正数



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

应该添加到 -20 以触发结转的最小正十进制数是多少(以 2 补码的表示法(?

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

首先将 -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. 有两种方法可以生成一个 进位 6 .任一x[6]都是一体的。或者有来自第 5 位的携带。我们希望最小化x,因此我们应该选择从位5携带的x = 0
      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

哒!

最新更新