我正在学习计算机体系结构课程,我有以下练习:
我应该添加到 -20 以触发结转的最小正十进制数是多少(以 2 补码的表示法(?
解决了这个练习,但我不确定我的结果。所以我找到了这个:
首先将 -20 转换为 2 补充二进制表示法。这给出了 -20 = 11101100。现在添加000101000以触发执行。这相当于20。
这对吗?
是的!没错!
将-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
,因此我们应该选择从位5
携带的x = 0
。
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
哒!