Processing math: 0%

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

2018年11月8日

0と1の配列
ラク
ラク
2進数とか16進数とかよくわからねぇ・・・
カズ
カズ
新数変換とか言われてもよくわからないよね

人は生活上、10進数に慣れていますが、コンピュータが扱う進数2進数です。

進数違いを理解し、進数変換の方法を理解しなければ、情報処理試験をはじめいたるところで苦戦します。

記事では進数の意味や計算の手順について解説します。

10進数とは

10進数は、普段私達が使っている進数で非常に馴染み深い数です。10進数を2進数・16進数などに進数変換する場合、あらためて10進数を理解する必要があります。

10進数の桁上がり

10進数の場合、数字を0、1、2、・・・7、8、9と数えていくと9の次に桁が上がって10になります。

そして10、11、12、・・・97、98、99と数えていくと99の次に桁が上がり100になります。

この110個集まって10になったときは101回ということで、10^{1}1010個集まって100になったときは102回かけた塊として、10^{2}のように表します。

キュー
キュー
^{2}の部分を指数っていうで

このように、数字が10個集まって桁が一つ上がることを10を基数にしていると言います。

分かりやすい例で挙げると、2023の場合、10^{3}2個、10^{2}0個、10^{1}2個、10^{0}3個集まったものと考えられます。

スポンサーリンク

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 1100 1101 1110 1111
ラク
ラク
覚えるのはめんどくさそうだな・・・
キュー
キュー
10進数から2進数への変換方法さえ押さえておけば、計算する必要はないで。

16進数

16進数は16を基数として数える方法です。数字では0から9までしか扱えないので、それに加えてAからF6つのアルファベットを加えて16の数字を活用します。

9の次が10にならずにA、B、・・・と増えて行き、Fの次に初めて10となります。

それ以降も同様で、9Fの次が100になるのではなく、FFの次が100になる点も注意しましょう。

カズ
カズ
ちなみに9Fの次はA0だよ!

10進数と16進数の対応表は以下になります。

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進数と考えられます。

ただし、2進数・16進数以外はあまり情報処理技術者試験で問われることが無いので割愛します。

キュー
キュー
4進数・8進数みたいな2進数の発展形なら出るかもしれんな

進数変換の計算方法

数式

次に進数の変換・計算方法を確認しましょう。

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個なので、以下のようになります。

2進数から10進数への変換

\begin{eqnarray}&&2^{4} \times 1 + 2^{3} \times 0 + 2^{2} \times 1 + 2^{1} \times 0 + 2^{0} \times 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個なので、以下のようになります。

16進数から10進数への変換

\begin{eqnarray}&&16^{4} \times 1 + 16^{3} \times 0 + 16^{2} \times 1 + 16^{1} \times 0 + 16^{0} \times 1 \\&=& 65536 + 0 + 256 + 0 +1 \\&=& 65793\end{eqnarray}

同じような要領でnに任意の数字を代入すればその進数を10進数に変換したときの値をがすぐに求まります。

10進数からn進数

次に10進数をn進数に変換する方法です。

こちらは10進数の中にいくつnの塊を作ることができるか考える必要があります。つまりnで割っていけば良いです。

そしてもう一つ着眼すべきは余りです。

求め方としては元の10進数Dnで割り、商を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進数に変換する流れを見ていきます。

上の図のD1000を、n16を代入します。結果以下のようになります。

数字を矢印の方向に読めばいいのですが、16進数で14Eとなるります。その点に留意すると、3E8が答えとなります。

他の進数の場合も割る値をnに代入してやれば同様にして求められます。

進数変換の計算問題

では慣れてきたところで一度練習問題を解いてみましょう。解法は上で説明した流れで解けるので、正答のみ記載します。

問1(10進数から2進数の計算)

次の10進数を2進数へ変換せよ。
(1) 8
問1(1)の正解を表示
1000

(2) 100

問1(2)の正解を表示
1100100

問2(10進数から16進数の計算)

次の10進数を16進数へ変換せよ。
(1) 10
問2(1)の正解を表示
A

(2) 100

問2(2)の正解を表示
64

問3(2進数から10進数の計算)

次の2進数を10進数へ変換せよ。
(1) 111
問3(1)の正解を表示
7

(2) 10101101

問3(2)の正解を表示
173

問4(16進数から10進数の計算)

次の16進数を10進数へ変換せよ。
(1) F
問4(1)の正解を表示
15

(2) 1A2B3C

問4(2)の正解を表示
1715004

2進数・10進数・16進数まとめ

私達が馴染んでいる10進数以外を知らないと、試験で問われても答えられません。特に2進数・16進数は試験でもよく問われます。

基本情報技術者試験ではプログラミングと絡めた問題も出るので、浮動小数点やIPアドレスの計算とセットで理解しておきましょう。

カズ
カズ
特にIPアドレスは2進数をわかっていないと理解できないよ!
スポンサーリンク