使用A(Decimal Output
)计算125 * A - 100 * (A Mod 4) + 2
的{{1}}以下哪项为真?
1)我们至少需要两个十进制加法器。
2)我们需要至少两个4位二进制加法器。
3)我们需要至少一个十进制乘法器和一个十进制加法器。
4)不属于上述情况。
为什么我们的教师选择one BCD digit
作为解决方案而未选择(4)
?任何想法或提示?
感谢所有人。
答案 0 :(得分:0)
A Mod 4
给出了BCD数字A
的两个最低有效位。所以,让我们分别考虑A的两个最低和最低有效位,如下:
X = A AND 3 = A Mod 4 (two least significant bits)
Y = A AND Ch (two most significant bits)
其中h
后缀Ch
后缀为十六进制C
(即Ch
为1100
二进制),AND
表示逻辑AND操作。
例如,如果我们有
A = abcd
其中a
,b
,c
和d
是任意二进制数字,我们会得到
X = 00cd
Y = ab00
重要的是,请注意
A = X + Y
(ab00 + 00cd = abcd)
这允许我们在乘法上应用乘法的分布,特别是
125 * A
= 125 * (X + Y)
= 125 * X + 125 * Y
所以,我们有
125 * A - 100 * (A Mod 4) + 2 (original equation)
= 125 * (X + Y) - 100 * X + 2 (replace A with X + Y)
= 125 * Y + 125 * X - 100 * X + 2 (distributivity)
= 125 * Y + 25 * X + 2 (125 * X - 100 * X = 25 * X)
= 100 * Y + 25 * (X + Y) (125 * Y = 100 * Y + 25 * Y)
= 100 * Y + 25 * A + 2 (replace X + Y with A)
在最后的等式100 * Y + 25 * A + 2
中,我们需要计算两个术语(100 * Y
和25 * A
),加上一个常数术语(2
)。
BCD中的术语100 * Y
很简单:只需将Y
两位数字位置向左移动到数百位。
对于25 * A
字词,我们需要一个乘法器将A
乘以25。
现在,我们需要将所有三个术语加在一起,但是:
100 * Y
和25 * A
中,设置位("一个"位)之间没有重叠。实际上,术语100 * Y
只能设置百位数的两个最高有效位(返回到Y
的定义),而术语25 * A
最多只能设置两个最低有效位相同的数字位置。要注意这一点,请记住25 * A = 100 * A / 4
,这意味着该术语的百位数不能超过3个。100 * Y
和25 * A
都是25的倍数,这意味着它们的总和也是如此,因此该总和的低位只能是0(0000)或5(0101)。第二位不能在该总和中设置,因此也不会与常量2
项重叠。由于在考虑可以设置哪个位位置时所有三个项都不重叠,我们可以使用简单的逻辑OR运算而不是实际的加法器来添加所有三个。
事实上,在我们所做的一切中,在任何时候都没有必要的加法器,这意味着4)是唯一合适的答案。