キーワード辞典
乗算・除算

登録日 08/12/05   更新日 22/04/23



元はと言えば、20世紀末期に、通産一種ネタで書いたのだけれど、再々・・・掲載。



乗算・除算の前提

コンピュータはハードウェアとして論理回路を組み合わせれば様々な機能の回路を作る事が出来、 一方、命令も、マイクロコードといったソフトウェアによって、同様に様々な機能を実現する事が出来るが、 その機能をハードウェアの回路で実現するか、 基本的な回路とマイクロコードといったソフトウェアで実現するか、という問題は有る。 以下は、四則演算のハードウェアとしては加算器のみが有る、という前提で説明をする。


  1. コンピュータには加算回路が有り、加算は、簡単に出来る事が出来る。

  2. 減算は、2の補数を利用する事により、 引かれる数に、引く数をNOT回路(ビットの反転)と加算器(1を加える)で正負の符号を反転した数値を 加算器で加算する事で実現する。

  3. コンピュータには算術シフトという命令が有り、数値扱いのビット列を左右にずらす事が出来る。 コンピュータは二進法で計算されているので、この命令を利用する事によって、 基数倍、つまり、2倍、4倍、8倍、16倍、32倍、64倍、・・・といった乗算は、簡単に出来る。


乗算

コンピュータ内部での二進法による乗算は、 二進法には0と1しか存在しない事、算術シフトが可能である事を利用し、 一般的な筆算による乗算・除算と同じ手順で行う。

二進法8ビット整数型において、00000011 × 00000101 という乗算を行うとする。
※算術シフトした際に右端に追加される0は省略している。また、赤い桁は、シフトした分だけ桁あふれしている。
これは、

     00000011 ← 掛けられる数 3
   × 00000101 ← 掛ける数   5
   ーーーーーーーーーー
     00000011 ← 掛けられる数を0ビット左へ算術シフト 2=1倍 →  3
 + 00000011   ← 掛けられる数を2ビット左へ算術シフト 2=4倍 → 12
 ーーーーーーーーーーーー
     00001111 ← 計算結果 15

という計算をしている事になり、つまり、掛ける数の各桁の1のビットの位置に合わせて 掛けられる数のビットを左シフトしたものを、最後に加算すれば良い事になる。
5倍するからと言って、5回足し算をする訳では無いのよ。

計算結果の符号は、掛けられる数、掛ける数の符号によって判断する。


十進法では基数倍な10倍を二進法で行うなら、

      00000011 ← 掛けられる数 3
    × 00001010 ← 掛ける数  10
    ーーーーーーーーーー
     0000011  ← 掛けられる数を1ビット左へ算術シフト 2=2倍 →  6
 + 00000011    ← 掛けられる数を3ビット左へ算術シフト 2=8倍 → 24
 ーーーーーーーーーーーーー
      00011110 ← 計算結果 30

となる。


浮動小数点型では、指数部を操作する事で、実現出来る。



除算

コンピュータ内部での二進法による除算も、 二進法には0と1しか存在しない事、算術シフトが可能である事を利用し、 一般的な筆算による除算と同じ手順で行う。

  1. 割る数を、割られる数以下で最大の値まで算術シフトする。

  2. 割られる数から算術シフトした値を減算する。答の、シフトした回数だけ左の桁に1を置く。

  3. 以降、引けなくなるまで繰り返す。






[ 赤い玉の画像 ] 「キーワード辞典」の目次へ

[ 黒板消しとチョーク受けの画像 ]