2 [例題5]シフト演算

2.1 積の演算

積(かけざん)の演算を行うとき、シフト命令を使えば効率の良いプログラムができる。ビッ トシフトを用いると積の演算ができる理由は以前述べているが、忘れた人もいるので、も う一度、説明する。

シフト命令を使った積の演算は、小学生のときに学習をした筆算の掛け算と同じである。 たとえば、 $ 34\times24$を計算する場合、筆算は $ 34\times(2\times10^{1}+4\times10^{0})$と分解したはずである。そうして、次の手順 でこの除算を行ったはずである。

  1. $ 34\times2$を計算し、1桁ずらす(10倍する)。
  2. $ 34\times4$を計算する。
  3. 先の計算結果を合計する。この合計816が $ 34\times24$の計算結果である。

同じことを2進数で行う。これがコンピューターによる乗算である。先ほどと 同じ計算( $ 32\times24$)を行う。これを2進数で表現すると、

$\displaystyle (100010)_2\times(11000)_2=(100010)_2\times(1\times2^4+1\times2^3)$    

となる。これを先ほど同様の手順で計算する。
  1. 掛け算は1倍なので計算する必要が無く、最初に $ (100010)_2$を4桁左 にずらす(ビットシフト)。すると、 $ (1000100000)_2$となる。
  2. 次に $ (100010)_2$を3桁左にずらす。すると、 $ (100010000)_2$となる。
  3. 先の計算結果を合計すると、 $ (1100110000)_2$となる。これは、10進 数の816である。
シフトと加算命令でかけ算ができることが分かったはずである。

今回の問題の用に分数の場合でも、

$\displaystyle 0.75$ $\displaystyle =\frac{1}{2}+\frac{1}{4}$    
  $\displaystyle =\left(2^{-1}\right)+\left(2^{-2}\right)$ (1)

と分解する。右に1ビットシフトさせたものと、右に2ビットシフトさせたものを加算すれ ば良い。

教科書のように

$\displaystyle 0.75=1-\left(2^{-2}\right)$ (2)

と分解するのは一般的ではない。

2.2 プログラムの構造とフローチャート

このプログラムのフローチャートを図3に示す。。
図 3: 教科書のList5-5のプログラムの構造とフローチャート
\includegraphics[keepaspectratio, scale=0.8]{flow_chart/REI5-5.eps}



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成16年12月25日


no counter