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)
其中Ch 中的h 后缀表示十六进制的C(即Ch 是二进制的1100),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)。
100 * Y 一词在 BCD 中很简单:只需将 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) 是唯一合适的答案。