我正在学习计算机体系结构课程,我有以下练习:
应该添加到-20的最小正十进制数是多少,以便触发进位(以2补码表示法)?
我解决了这个练习,但我不确定我的结果。所以我发现了这个:
首先将-20转换为2补充二进制表示法。这给出了-20 = 11101100.现在添加000101000来触发执行。相当于20。
那会是正确的吗?
答案 0 :(得分:0)
是的!那是对的!
将-20
添加到20
会导致0
结果为1
。如果您选择任何小于20
的正数,则不会生成结转,结果将为负数。如果您选择任何大于20
的正数,它将生成带有正结果的结转。所以20
就是您正在寻找的答案。
如果你真的想进入二进制细节,你可以一步一步:
-20
的号码,并会生成一个结果,让我们用x
表示,y
将是结果并且c
将是结转。 11101100
+ xxxxxxxx
--------
cyyyyyyyy
c = 1
,我们知道X is positive
所以最重要的一点是0
11101100
+ 0xxxxxxx
--------
1yyyyyyyy
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
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
钽哒!