【问题标题】:Smallest positive number to trigger carry out触发执行的最小正数
【发布时间】:2016-05-01 09:02:38
【问题描述】:

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

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

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

首先将 -20 转换为 2 补码二进制。这给出了 -20 = 11101100。现在添加 000101000 以触发执行。相当于 20。

这样对吗?

【问题讨论】:

标签: cpu-architecture twos-complement base-conversion


【解决方案1】:

是的!没错!

-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

哒哒!

【讨论】:

  • 非常感谢!你的解释很清楚:)
猜你喜欢
  • 2015-06-06
  • 1970-01-01
  • 2019-03-17
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多