Shiro Kawaiさんのプロフィール写真

MATZNAGA Hitoshiさんの回答の通りですが、説明を補足しますね。

確かに足し算として計算しますが、愚直に1個づつ足すのではなく、筆算と同じようにしています。10進数の筆算はこんな感じですよね:

  1. 15 
  2. x 23 
  3. ------ 
  4. 45 (15 x 3) 
  5. + 30 (15 x 2) 
  6. ====== 
  7. 345 

乗数(23)の各桁に対して被乗数(15)を乗じて、桁をずらして(シフトして)足しています。

コンピュータ内部では2進数で同じことをします。2進数の一桁の乗算は×0 で全部ゼロになるか×1でそのままかのどちらかなので、事実上足し算とシフトだけで済みます。

  1. 101 (十進数の5) 
  2. x 110 (十進数の6) 
  3. ------- 
  4. 000 (101 x 0) 
  5. 101 (101 x 1) 
  6. +101 (101 x 1) 
  7. ======= 
  8. 11110 (十進数の30) 

昔のマイクロプロセッサではソフトウェアでやっていました。現在のプロセッサではこれと同等の計算を行う回路が組み込まれています。

さて割り算ですが、これも筆算と同じことをします。桁ずらしと引き算だけでできます。[11110]÷[110]を計算してみましょう。

  1. __101__ 
  2. 110 ) 11110 
  3. 110 (110 x 1) 
  4. ---- 
  5. 11 
  6. 000 (110 x 0) 
  7. --- 
  8. 110 
  9. 110 (110 x 1) 
  10. --- 
  11. 0 

乗算は桁ごとの計算を並行してできるので高速化しやすいですが、除算は上位桁から順に求めて引き算、を繰り返さないとならないので高速化しにくいです。

この質問に対する他の6件の回答を表示