はじめに
前回は、8進数・16進数から10進数への変換方法を解説した。今回はまず前回の練習問題の解答を確認し、そのあとで逆方向の変換(10進数から8進数・16進数への変換)、そして2進数・8進数・16進数どうしを直接変換する方法を見ていこう。
前回の練習問題の解答
問1:632(8進数)を10進数に変換せよ
6×64 + 3×8 + 2×1 = 384 + 24 + 2 = 410答え:410
問2:1C4(16進数)を10進数に変換せよ
Cは12を表すため、次のように計算する。
1×256 + 12×16 + 4×1 = 256 + 192 + 4 = 452答え:452
10進数から8進数への変換:除算法
10進数から2進数への変換で使った「割り続けて余りを記録する」方法は、割る数を変えるだけで8進数・16進数にもそのまま応用できる。10進数の492を8進数に変換する場合を見てみる。
492 ÷ 8 = 61 余り 4
61 ÷ 8 = 7 余り 5
7 ÷ 8 = 0 余り 7余りを下から上に読み上げると754となり、前回確認した「8進数の754は10進数の492」という対応と一致する。
10進数から16進数への変換:除算法
同じ手順を、割る数を16に変えれば16進数への変換になる。10進数の687を例に見てみる。
687 ÷ 16 = 42 余り 15(F)
42 ÷ 16 = 2 余り 10(A)
2 ÷ 16 = 0 余り 2余りを下から並べると2AFとなり、こちらも前回確認した対応と一致する。
余りが10以上になる場合は、A~Fの記号に置き換えるのを忘れないようにしたい。
2進数と16進数の直接変換:4桁ごとにまとめる
ここまでは10進数を経由する変換を見てきたが、2進数と16進数の間には特別な近道がある。16は2の4乗であるため、2進数の4桁がちょうど16進数の1桁に対応する。この対応表を使えば、10進数を経由せずに直接変換できる。
| 2進数 | 16進数 | 2進数 | 16進数 |
|---|---|---|---|
| 0000 | 0 | 1000 | 8 |
| 0001 | 1 | 1001 | 9 |
| 0010 | 2 | 1010 | A |
| 0011 | 3 | 1011 | B |
| 0100 | 4 | 1100 | C |
| 0101 | 5 | 1101 | D |
| 0110 | 6 | 1110 | E |
| 0111 | 7 | 1111 | F |
例えば11010110という2進数を16進数に変換したい場合、右から4桁ずつ区切ると1101と0110になる。対応表を見ると1101はD、0110は6であるため、11010110は16進数でD6となる。10進数を経由するよりも、はるかに短い手順で変換できる。
2進数と8進数の直接変換:3桁ごとにまとめる
同様に、8は2の3乗であるため、2進数の3桁がちょうど8進数の1桁に対応する。
| 2進数 | 8進数 |
|---|---|
| 000 | 0 |
| 001 | 1 |
| 010 | 2 |
| 011 | 3 |
| 100 | 4 |
| 101 | 5 |
| 110 | 6 |
| 111 | 7 |
例えば101110という2進数を8進数に変換する場合、右から3桁ずつ区切ると101と110になる。対応表から101は5、110は6であるため、101110は8進数で56となる。
どちらの方法を使うべきか
- 10進数を経由する除算法:どの基数どうしでも使える汎用的な方法だが、手順が多くやや時間がかかる。
- 2進数⇔16進数、2進数⇔8進数の直接変換:手順は少ないが、2進数を介した組み合わせでしか使えない(例えば8進数から16進数へ直接変換したい場合は、一度2進数か10進数を経由する必要がある)。
試験本番では、問題の形式に応じてどちらの方法が速いかを見極め、使い分けられるようにしておくとよい。
まとめ
- 10進数から8進数・16進数への変換は、それぞれ8・16で割り続けて余りを並べる除算法で行う。
- 2進数と16進数は4桁単位、2進数と8進数は3桁単位で直接対応しており、対応表を使えば10進数を経由せずに変換できる。
- 除算法は汎用的だが手順が多く、直接変換は手順が少ないが2進数を介する組み合わせでしか使えない。この違いを理解して使い分けることが大切である。
次回からは、負の数をコンピュータの中でどう表現するかという「2の補数表現」、そして小数点を含む数値の表現方法について、複数回に分けて解説していこう。



コメント