ITサポート

セミナー

会員特典

その他

過去のコラム等

Twitter

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■第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 で、これが答えとなります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━