A Mod 4
元の式の は、BCD 桁の最下位 2 ビットを示しますA
。したがって、次のように、A の 2 つの最上位ビットと最下位ビットを別々に考えてみましょう。
X = A AND 3 = A Mod 4 (two least significant bits)
Y = A AND Ch (two most significant bits)
ここで、h
接尾辞 inCh
はC
16 進数 (つまりCh
、1100
2 進数) をAND
意味し、論理 AND 演算を示します。
たとえば、
A = abcd
ここa
でb
、、、c
およびd
は任意の 2 進数であり、次のようになります。
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
には、計算する必要がある 2 つの項 (100 * Y
および25 * A
) と、1 つの定数項 ( 2
) があります。
この用語100 * Y
は BCD では簡単ですY
。2 桁の位置を左にシフトし、100 の桁に移動するだけです。
項については、2525 * A
を掛ける倍数が必要です。A
ここで、3 つの項すべてを一緒に追加する必要がありますが、次のようになります。
- と の設定ビット (「1」ビット) の間に重複はありませ
100 * Y
ん25 * A
。実際、term100 * Y
は 100 桁の最上位 2 ビットのみを設定できますが ( の定義に戻りますY
)、term25 * A
はせいぜい同じ桁位置の 2 つの最下位ビットを設定します。それを確認するには、 を覚えておいてください。これは25 * A = 100 * A / 4
、その用語の百の位が 3 を超えることはできないことを意味します。
- 項
100 * Y
と25 * A
は両方とも 25 の倍数です。つまり、それらの合計も 25 の倍数であるため、その合計の下位桁は 0 (0000) または 5 (0101) しかありません。その合計では 2 ビット目を設定できないため、定数2
項との重複もありません。
どのビット位置を設定できるかを考えると、3 つの項すべてが重複しないため、実際の加算器の代わりに単純な論理 OR 演算を使用して 3 つすべてを加算できます。
実際、私たちが行ったすべてのことにおいて、加算器が必要になったことは一度もありませんでした。つまり、4) が唯一の適切な答えです。