基数変換
情報処理技術者試験には、基数変換の問題がよく出題されます。ここでは以下の基本的な4つの基数変換について解説します。
- n進数から10進数
- 10進数からn進数
- 2進数から8進数
- 2進数から16進数
n進数から10進数への基数変換
2進数「110.011」を10進数へ基数変換してみます。 変換方法は2進数の値の各桁に2進数の重みを掛けて最後に足します。
2進数 | 1 | 1 | 0 | . | 0 | 1 | 1 |
---|---|---|---|---|---|---|---|
重み | 2^2 | 2^1 | 2^0 | . | 2^-0 | 2^-1 | 2^-2 |
掛ける | 4 | 2 | 0 | . | 0 | 0.25 | 0.125 |
最後に全てを足します「4+2+0+0+0.25+0.125」 となり、2進数「110.011」は10進数では「6.375」となります。
他の進数から10進数への基数変換も同様に計算できます。
n進数から10進数への基数変換は各桁にn進数の重みを掛けて足す
10進数からn進数への基数変換
先ほどとは逆に10進数「6.375」を2進数へ基数変換します。 最初に整数部分と小数部分に分けて考えます。
整数部分
「6.375」整数部分は「6」です。2進数の場合、この値を2で割り余りを下から順に並べていきます。
値 | 基数 | 積 | 余り | ||
---|---|---|---|---|---|
6 | ÷ | 2 | = | 3 | 0 |
3 | ÷ | 2 | = | 1 | 1 |
1 | ÷ | 2 | = | 0 | 1 |
これを下から順に並べると、2進数の整数部分は「110」になります。
2回目以降の計算は商を引き継いでいき商が0になったら終了とする
小数部分
「6.375」の少数部分は「0.375」です。2進数の場合、この値を2で掛けて整数部分を上から順に並べていきます。
値 | 基数 | 積(整数部分) | 積(少数部分) | ||
---|---|---|---|---|---|
0.375 | × | 2 | = | 0 | .75 |
0.75 | × | 2 | = | 1 | .5 |
0.5 | × | 2 | = | 1 | .0 |
この積の整数部分を上から順に並べると、「011」となりこの値が2進数の少数部分になります。 最後に整数部分の結果と小数部分の結果を足した値「110+0.011=110.011」が10進数「6.375」を2進数へ基数変換した値となります。
10進数からn進数への基数変換は整数部分をnで割り余りを下から並べる
少数部分をnで掛け整数部分を上から並べる
2進数から8進数
「2^3=8」から2進数の3桁は8進数の1桁に対応しています。2進数の値を8進数で表すには小数点を基準に3桁ずつ区切り3桁に足らない部分は0で補い重みを掛けそれぞれを足して表します。 2進数「1011.01」を8進数に基数変換してみます。
2進数 | 1 | 0 | 1 | 1 | . | 0 | 1 | |||
---|---|---|---|---|---|---|---|---|---|---|
0を補う | 0 | 0 | 1 | 0 | 1 | 1 | . | 0 | 1 | 0 |
3桁区切り重み | 4 | 2 | 1 | 4 | 2 | 1 | . | 4 | 2 | 1 | ||||||
掛ける | 0 | 0 | 1 | 0 | 2 | 1 | . | 0 | 2 | 0 |
最後に3桁区切りの中の値を足します「(0+0+1=1)、(0+2+1=3)、(0+2+0=2)」。 各区切りがそのまま位になるので2進数「1011.01」は8進数では「13.2」となります。
2進数から16進数
「2^4=16」から2進数の4桁は16進数の1桁に対応しています。先ほどの2進数から8進数同様の考え方を4桁に変えることで表すことが出来ます。 2進数「1011.01」を16進数に基数変換してみます。
2進数 | 1 | 0 | 1 | 1 | . | 0 | 1 | ||
---|---|---|---|---|---|---|---|---|---|
0を補う | 1 | 0 | 1 | 1 | . | 0 | 1 | 0 | 0 |
4桁区切り重み | 8 | 4 | 2 | 1 | . | 8 | 4 | 2 | 1 | ||||||
掛ける | 8 | 0 | 2 | 1 | . | 0 | 4 | 0 | 0 |
4桁区切りの中の値を足します「(8+0+2+1=11)、(0+4+0+0=4)」となり、2進数「1011.01」は16進数では「B.4」となります。