[情報処理技術者試験]2進数、10進数、16進数の意味と進数変換の方法

人が生活で扱う数字とコンピュータが扱う数字では進数が異なります。
この違いを理解し、どのように計算し、進数変換しているかを把握できないと情報処理に関する資格やプログラミングを組む際に苦戦することになるので、この記事ではその違いを明確化し、計算方法を解説して以降と思います。
10進数について
10進数は普段私達が使っている数で非常に馴染み深い数ですが、2進数、16進数などに変換するには改めて10進数を理解する必要があります。
数字を\(0、1、2、・・・7、8、9\)と数えていくと\(9\)の次に桁が上がって\(10\)になります。
そして\(10、11、12、・・・97、98、99\)と数えていくと\(99\)の次に桁が上がり\(100\)になりますよね。
この\(1\)が\(10\)個集まって\(10\)になったときは\(10\)が\(1\)回ということで、\(10^{1}\)
\(10\)が\(10\)個集まって\(100\)になったときは\(10\)が\(2\)回ということで、\(10^{2}\)のように表すことが出来ます。
このように、数字が\(10\)個集まって桁が一つ上がることを\(10\)を基数にしていると言います。
分かりやすい例で挙げると、\(2018\)の場合、\(10^{3}\)が\(2\)個、\(10^{2}\)が\(0\)個、\(10^{1}\)が\(1\)個、\(10^{0}\)が\(8\)個集まったものと考えることが出来ます。
2進数・16進数について
次に少し馴染みにくい数え方でもある2進数、16進数について触れていきます。
2進数
2進数はその名の通り、「\(0\)」と「\(1\)」の2つの数字だけを扱います。
\(0\)の次は\(1\)になりますが、\(1\)の次は\(2\)ではなく、桁が上がって\(10\)となるわけですね。
このように\(2\)を基数としたものを2進数と呼び、2倍ごとに桁が上がっていくことが分かります。
例を挙げるなら\(10010\)であれば、\(2^{4}\)が\(1\)個、\(2^{3}\)が\(0\)個、\(2^{2}\)が\(0\)個、\(2^{1}\)が\(1\)個、\(2^{0}\)が\(0\)個集まったものと考えることが出来ます。
ちなみに10進数と2進数の対応表は以下のようになります。
10進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
2進数 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 |
10進数 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
2進数 | 1000 | 1001 | 1010 | 1011 | 1101 | 1110 | 1111 | 10000 |
16進数
16進数は今度、\(16\)を基数として数える方法です。数字では\(0\)から\(9\)までしか扱えないので、それに加えて\(A\)から\(F\)の6つのアルファベットを加えて\(16\)の数字とします。
\(9\)の次が\(10\)にならずに\(A、B、・・・\)と増えて行き、\(F\)の次に初めて\(10\)となります。
それ以降も同様で、\(9F\)の次が\(100\)になるのではなく、\(FF\)の次が\(100\)になる点も注意しましょう。
10進数との対応表は以下の様になります。
10進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
16進数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
(10) | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
(16) | 8 | 9 | A | B | C | D | E | F | 10 |
その他の進数
2進数や16進数以外にも身の回りにはいくつも進数が存在しています。
例えば\(1\)日は\(24\)時間なので24進数。\(1\)時間は\(60\)分なので60進数のように考えることが出来ます。
ただし、情報処理技術者試験で問われることはまず無いのでここは割愛します。
変換方法
次に進数の変換方法を書いていきます。
n進数から10進数
まずはn進数(今回の場合だとnには2や16が入る)から10進数へ変換する方法です。
\(n\)は自然数(Natural number)の頭文字で、任意の自然数を入れて良いとしましょう。
\(n\)進数の場合、各桁に\(n\)個の塊がいくつあるかを見ていくことになります。
10101がn進数の場合、は\(n^{4}\)が\(1\)個、\(n^{3}\)が\(0\)個、\(n^{2}\)が\(1\)個、\(n^{1}\)が\(0\)個、\(n^{0}\)が\(1\)個集まったものになります。
具体的にnに値を放り込んで見ましょう。10101が2進数だとすると、10進数で表した場合は\(2^{4}\)が\(1\)個、\(2^{3}\)が\(0\)個、\(2^{2}\)が\(1\)個、\(2^{1}\)が\(0\)個、\(2^{0}\)が\(1\)個なので、
\\&=& 16 + 0 + 4 + 0 +1
\\&=& 21\end{eqnarray}
となります。
次に10101が16進数だとすると、10進数で表した場合は\(16^{4}\)が\(1\)個、\(16^{3}\)が\(0\)個、\(16^{2}\)が\(1\)個、\(16^{1}\)が\(0\)個、\(16^{0}\)が\(1\)個なので、
\\&=& 65536 + 0 + 256 + 0 +1
\\&=& 65793\end{eqnarray}
となります。
同じような要領で\(n\)に任意の数字を代入すればその進数を10進数に変換したときの値を求めることが可能です。
10進数からn進数
次に10進数をn進数に変換する方法です。
こちらは10進数の中にいくつnの塊を作ることが出来るか考える必要があります。つまりは\(n\)で割っていけば良いわけです。
そしてもう一つ着眼すべきは余りで、これがその塊を作ったときにいくつその塊があるかを知る手がかりになります。
こちらはn進数から10進数を求める以上に考えるとこんがらがるので機械的に計算できるようになりましょう。
求め方としては元の10進数\(D\)を\(n\)で割り、商を\(a_{1}\)、余りを\(b_{1}\)。次に商の\(a_{1}\)を再び\(n\)で割り、商を\(a_{2}\)、余りを\(b_{2}\)としてその作業を商の値が\(n\)の値より小さくなるまで続けます。
図に描くとこんな感じです。
そしてこれを\(a_{m}\)から図のように羅列します。
\(a_{m}b_{m-1}・・・b_{2}b_{1}\)が10進数に変換した値になります。
これでもぶっちゃけ分かりづらいので具体的な数字を入れてしまいましょう。
10進数の数字を\(1000\)として、これを16進数にしたい場合をやってみましょう。
上の図で言うところの\(D\)に\(1000\)を、\(n\)に\(16\)を代入します。
すると図のようになります。
従って矢印の方向に読めばいいのですが、16進数で\(14\)は\(E\)となるので、その点に留意して\(3E8\)が正解となります。
他の進数の場合も割る値を\(n\)に代入してやれば同様にして求めることが可能です。
練習問題
では慣れてきたところで一度練習問題を解いてみましょう。
解法は上で説明した流れで解けるので解答のみの記載となります。
問1(10進数→2進数)
(1) \(8\)
(2) \(100\)
(1) \(1000\)
(2) \(1100100\)
問2(10進数→16進数)
(1) \(10\)
(2) \(100\)
(1) \(a\)
(2) \(64\)
問3(2進数→10進数)
(1) \(111\)
(2) \(10101101\)
(1) \(7\)
(2) \(173\)
問4(16進数→10進数)
(1) \(f\)
(2) \(1a2b3c\)
(1) \(15\)
(2) \(1715004\)
まとめ
今回は私達が馴染んでいる10進数やコンピュータが扱いやすい2進数、その変換方法などをまとめました。
基本情報技術者試験などでは良く問われることがある題材なので、浮動小数点やIPの計算とセットで理解しておくと良いでしょう。
また、下記のページではそれぞれの進数に変換するツールを置いています。勉強したい方は役立ててください。
ディスカッション
コメント一覧
まだ、コメントがありません