自営業(ソフトウェアエンジニア、役者) · 執筆者は4,030件の回答を行い、917.6万回閲覧されています · 5年前
MATZNAGA Hitoshiさんの回答の通りですが、説明を補足しますね。
確かに足し算として計算しますが、愚直に1個づつ足すのではなく、筆算と同じようにしています。10進数の筆算はこんな感じですよね:
- 15
- x 23
- ------
- 45 (15 x 3)
- + 30 (15 x 2)
- ======
- 345
乗数(23)の各桁に対して被乗数(15)を乗じて、桁をずらして(シフトして)足しています。
コンピュータ内部では2進数で同じことをします。2進数の一桁の乗算は×0 で全部ゼロになるか×1でそのままかのどちらかなので、事実上足し算とシフトだけで済みます。
- 101 (十進数の5)
- x 110 (十進数の6)
- -------
- 000 (101 x 0)
- 101 (101 x 1)
- +101 (101 x 1)
- =======
- 11110 (十進数の30)
昔のマイクロプロセッサではソフトウェアでやっていました。現在のプロセッサではこれと同等の計算を行う回路が組み込まれています。
さて割り算ですが、これも筆算と同じことをします。桁ずらしと引き算だけでできます。[11110]÷[110]を計算してみましょう。
- __101__
- 110 ) 11110
- 110 (110 x 1)
- ----
- 11
- 000 (110 x 0)
- ---
- 110
- 110 (110 x 1)
- ---
- 0
乗算は桁ごとの計算を並行してできるので高速化しやすいですが、除算は上位桁から順に求めて引き算、を繰り返さないとならないので高速化しにくいです。
閲覧数:1.3万回 ·
高評価を見る
· 1件のシェアを表示
· 1/7件の回答