━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■第10回 乗算と除算
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
前回、加算と減算を説明したので、今回は乗算と除算です。
コンピュータは減算処理ができないため、加算の仕組みを利用して計算して
いました。
勘のいい人は気づいていると思いますが、乗算と除算もちょっと変わった方
法で計算していますので、一緒に考えてみてください。
●シフト演算
乗算と除算を学ぶ前に覚えておくことに、「シフト演算」があります。
シフト演算とは、簡単に言ってしまえば、桁をずらすことです。
10進数では、複雑な数字を掛け算するときは暗算が難しいものですが、10を
掛けるのは誰でも暗算ができます。
なぜかと言えば、後ろに 0 を付けるだけだからです。
第7号でも説明しましたが、10進数は「10のn乗」で位を表現しているので、
0 を後ろに 1 つ付加するだけで、10を掛けたことになるのです。
同じように、2 つ付加すれば、100を掛けたことになりますね。
逆に10で割る場合は、1の位を消せばいいです。
小数で表現したい場合は、小数点の位置を左にずらします。
このように、基数とその乗数で表現できる数の乗算と除算は、簡単に計算す
ることが可能です。
さて、2進数ではどうかと言うと、もちろんシフト演算は可能です。
暗算は少しやりにくいですが...
2進数の場合、2のn乗で位を表現しますので、2の位、4の位、8の位、16の位
といった感じでキリの悪い数になりますが、全く同じやり方になります。
例えば、5 は 2進数で 101 ですが、後ろに 0 を 1 つ付加すると、1010と
なり、10進数では 10 となります。
同様に、一番右の 1 を消すと 10 で、10進数では 2 になりますね。
このようにして、0 を付加することで 1桁繰り上げる事を「左シフト」、
逆に右の桁から消していくことを「右シフト」と呼びます。
●乗算(掛け算)
このように、シフト演算を使うと一部の数については乗算を行うことができ
ますが、もちろん全ての数で計算することはできません。
そこで、加算と組み合わせます。
つまり、5 を掛けたい場合、5 を 4(2の2乗) と 1 に分けます。
例えば、3 × 5 で考えてみましょう。
(例)3 × 5 → 3 × (4 + 1) → 3 × 4 + 3 × 1 → 3 × 4 + 3
このように分解すると、(3 × 4) の部分はシフト演算、その結果に 3 を
足せば求めることができるのです。
(3 × 4) の 4 は、2の2乗ですから、3 を 2ビット左にシフトすればよいで
すね。
3 は 2進数で 11 ですから、1100 ですね。
その結果に 3 を加算するのですから、1100 + 11 = 1111 となり、10進数
で 15 となりました。
●除算(割り算)
除算もシフト演算と加算で計算します。
減算も必要ですが、2の補数を使った加算と考えてください。
例として、15 ÷ 3 で考えてみます。
15 から 3 を何回引くことができるかというのが除算なんですが、ひたすら
引き続けるのは時間の無駄なので、シフト演算した数をまとめて引くことで
効率良く計算することができます。
15 を 2進数で表現すると 1111、3 を 2進数で表現すると 11 です。
11 を 2バイト左シフトすると、1100 となり、1111 から引くことが可能で、
余りは 11 です。この余りから、さらに 11 を引くことができます。
最初に引いたのは、2バイト左シフトしたので、4 (2の2乗) です。
次に引いたのは 11 なので、1 です。
合計すると 5 で、これが答えとなります。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━