触发执行的最小正数
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
就是你要找的答案。
如果你真的想深入二进制细节,你可以一步一步来:
- 我们正在寻找一个将添加到
-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
哒哒!
我正在学习计算机体系结构课程,并且有以下练习:
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
就是你要找的答案。
如果你真的想深入二进制细节,你可以一步一步来:
- 我们正在寻找一个将添加到
-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
哒哒!