乗算法 (10 進→2 進)

乗算法 (10 進→2 進)

乗算法 (10 進→2 進)

英語表記: Multiplication Method (Decimal to Binary)

概要

乗算法は、基数変換(二進数, 十六進数)の分野の中でも、特に「10進数から2進数への変換」を行う際に、「小数部分」を処理するために用いられる非常に重要な計算手法です。整数部分の変換に用いられる「除算法」(繰り返し割り算を行う方法)とは対照的に、乗算法では基数である「2」を繰り返し掛けることで、小数点の右側に並ぶ2進数の各桁(ビット)を順番に抽出していきます。この手法は、私たちが普段意識しない小数点の裏側、すなわち $2^{-1}, 2^{-2}, 2^{-3}$ の位の値を正確に見つけ出すことを目的としています。

詳細解説

なぜ乗算が必要なのか(文脈:小数変換)

基数変換は、整数部分と小数部分で処理方法が根本的に異なります。私たちが現在扱っているのは、基数変換(二進数, 十六進数) → 10 進⇔2 進変換 → 小数変換という特定の文脈です。

10進数の整数を2進数に変換する場合、私たちは2で割り続け、その余りを下位の桁から順に採用する「除算法」を使います。しかし、小数を変換する際にはこの方法は使えません。

2進数の小数「0.101」を考えてみましょう。これは $1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3}$ を意味します。つまり、小数第1位は $1/2$(0.5)の重みを、小数第2位は $1/4$(0.25)の重みを、というように持っています。

乗算法は、この重みを効率的に取り出すための仕組みです。小数部分に基数である「2」を掛ける操作は、小数点を右に1桁ずらすことと同じ意味を持ちます。小数点を右にずらすことで、本来小数第1位($2^{-1}$)にあった値が整数部分($2^0$)に移動し、その桁の値(0または1)として明確に取り出せるようになるのです。この発想の転換が、乗算法の核となる部分です。

乗算法の具体的な手順

乗算法は非常にシンプルですが、手順を間違えると結果が変わってしまうため、注意が必要です。

  1. 準備: 変換したい10進数の小数部分(例:0.X)を用意します。
  2. 乗算: その小数部分に基数「2」を掛けます。
  3. ビット抽出: 積(計算結果)の「整数部分」を取り出します。これが、求めている2進数の桁の値(ビット)となります。取り出したビットは、$2^{-1}, 2^{-2}, 2^{-3}, \dots$ の順に、つまり上から下へ並べていきます。
  4. 繰り返し: 積の「小数部分」のみを次の計算対象として取り出し、ステップ2に戻って再び2を掛けます。
  5. 終了条件: この繰り返しは、小数部分が0になるか、または求められる精度(桁数)に達するまで続けます。

この手順を繰り返すことで、私たちは10進数の小数の中に、どれだけ $1/2$ が含まれ、残りにどれだけ $1/4$ が含まれ、さらに残りにどれだけ $1/8$ が含まれるか、という構造を順次明らかにしていくことができるのです。このロジックは、基数変換の面白さが凝縮されている部分だと思います。

無限小数への対応

乗算法の適用において、必ずしも小数部分が0になって計算が終了するとは限りません。例えば、10進数の「0.1」を2進数に変換しようとすると、計算は永遠に終わりません(無限小数になります)。

コンピュータの内部では、このような無限小数は有限の桁数で打ち切られるため、厳密な値ではなく近似値として扱われます。これは、浮動小数点演算における誤差(丸め誤差)の主要な原因であり、ITエンジニアとして必ず理解しておかなければならない重要な知識です。乗算法を学ぶことは、このコンピュータの限界を知る第一歩とも言えるでしょう。

具体例・活用シーン

乗算法の仕組みを理解するために、具体的な計算例と、初心者にも分かりやすい比喩(メタファー)を通じてその動作を確認してみましょう。これは、基数変換(二進数, 十六進数)の基本を固める上で欠かせないステップです。

1. 有限小数(0.8125)の変換例

10進数の 0.8125 を2進数に変換します。

| ステップ | 計算対象(小数部) | × 2 | 積 | 整数部 (ビット) | 次の計算対象 (小数部) |
| :—: | :—: | :—: | :—: | :—: | :—: |
| 1 ($2^{-1}$の位) | 0.8125 | × 2 | 1.625 | 1 | 0.625 |
| 2 ($2^{-2}$の位) | 0.625 | × 2 | 1.25 | 1 | 0.25 |
| 3 ($2^{-3}$の位) | 0.25 | × 2 | 0.50 | 0 | 0.50 |
| 4 ($2^{-4}$の位) | 0.50 | × 2 | 1.00 | 1 | 0.00 |

小数部分が 0.00 になったため、計算終了です。取り出した整数部分を上から順に並べると、「1101」となります。
したがって、0.8125 (10) = 0.1101 (2) です。

2. メタファー:残りの資源を倍々ゲームで調べる

乗算法の動作を、資源(エネルギーや水など)の配分を調べる作業に例えてみましょう。

あなたは、ある資源(全体が1)のうち、端数(小数部分)しか持っていません。あなたは、この端数が「半分($2^{-1}$)」「四分の一($2^{-2}$)」「八分の一($2^{-3}$)」のどの組み合わせでできているかを知りたいのです。

  1. 最初の確認: あなたが持っている端数を2倍にします。
    • もし2倍にした結果、資源が「1単位以上」になったら、それは元の端数が少なくとも「半分($2^{-1}$)」以上あったことを意味します。この「1単位」を取り出します(これがビットの「1」)。
    • 残った「1単位未満」の端数だけが、次の調査対象になります。
  2. 次の確認: 残った端数をさらに2倍にします。
    • もし2倍にした結果、資源が「1単位以上」になったら、それは元の端数が「四分の一($2^{-2}$)」の成分を持っていたことを意味します。この「1単位」を取り出します(これがビットの「1」)。
    • 残った端数だけをまた2倍にする…

このように、乗算法は「残りの資源(小数)を常に2倍にし、1単位(整数部分)を取り出す」という作業を繰り返すことで、その小数の中に潜む2進数の重み($1/2, 1/4, 1/8, \dots$)を、大きい順に、確実に取り出しているのです。この「倍々ゲーム」の比喩を使えば、乗算法の仕組みが直感的に理解できるのではないでしょうか。

資格試験向けチェックポイント

ITパスポート試験(IP)、基本情報技術者試験(FE)、応用情報技術者試験(AP)のいずれにおいても、基数変換は出題頻度の高い基本テーマです。特に小数変換は、整数変換(除算法)と混同しやすいため、重点的な対策が必要です。

  • 除算法との明確な区別:
    • 整数部変換は「除算法」(割り算、余りを下から読む)。
    • 小数部変換は「乗算法」(掛け算、整数部を上から読む)。
    • この使い分けを問う問題は頻出です。特に、10進数「12.5」を変換する場合、整数部「12」は除算法、小数部「0.5」は乗算法を使う、という複合的な理解が求められます。
  • ビットの読み取り順序:
    • 乗算法で得られた整数部分(ビット)は、計算の上から下へ($2^{-1}$ の位から順に)並べるのがルールです。除算法(下から上へ読む)と混同しないように細心の注意を払ってください。これは受験者が最も間違えやすいポイントの一つです。
  • 計算の終了条件:
    • 小数部分がゼロになる(有限小数)か、または問題文で指定された桁数に達するまで計算を続けることを覚えておきましょう。指定桁数で打ち切る場合は、それが丸め誤差の原因になる、という知識もセットで問われることがあります。
  • 小数変換の応用:
    • 応用情報技術者試験などでは、乗算法の知識が、浮動小数点数の表現(単精度・倍精度)や正規化の計算過程を理解するための基礎として利用されます。単に計算できるだけでなく、「なぜその計算が必要なのか」という背景知識($2^{-n}$の重み)を問われることがあります。

基数変換(二進数, 十六進数)の知識は、コンピュータの内部動作を理解する上での土台となります。ぜひ、この乗算法をマスターして、確実に得点源にしてください。

関連用語

  • 情報不足

(注記:この文脈において、乗算法は「10 進⇔2 進変換」の「小数変換」という極めて限定的な技術要素を指しています。関連用語としては「除算法」「浮動小数点数表現」「丸め誤差」などが考えられますが、本記事では特定の用語を提示する情報が不足しているため、上記のように記述しています。)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

両親の影響を受け、幼少期からロボットやエンジニアリングに親しみ、国公立大学で電気系の修士号を取得。現在はITエンジニアとして、開発から設計まで幅広く活躍している。

目次