基本情報技術者試験対策(7)「2進数と16進数および8進数の変換(2)」

スポンサーリンク
IT系

はじめに

前回は、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進数
0000010008
0001110019
001021010A
001131011B
010041100C
010151101D
011061110E
011171111F

例えば11010110という2進数を16進数に変換したい場合、右から4桁ずつ区切ると11010110になる。対応表を見ると1101D01106であるため、11010110は16進数でD6となる。10進数を経由するよりも、はるかに短い手順で変換できる。

2進数と8進数の直接変換:3桁ごとにまとめる

同様に、8は2の3乗であるため、2進数の3桁がちょうど8進数の1桁に対応する。

2進数8進数
0000
0011
0102
0113
1004
1015
1106
1117

例えば101110という2進数を8進数に変換する場合、右から3桁ずつ区切ると101110になる。対応表から10151106であるため、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の補数表現」、そして小数点を含む数値の表現方法について、複数回に分けて解説していこう。

コメント

タイトルとURLをコピーしました