基本情報技術者試験の科目Aでは、2進数と16進数が説明なしで出てきます。 「何ビットで何通り表せるか」「この16進数は10進でいくつか」を、その場で出せることが前提になっています。 この回では、10進数の位取りから始めて、2進数→10進数、10進数→2進数、 2進数⇔16進数の3方向を手順にします。
出典:基本情報技術者試験 シラバス Ver9.2 大分類1 基礎理論/中分類1 基礎理論/1. 離散数学
(1)基数
2 進数,8 進数,10 進数,16 進数,n 進数の表現,2 進数と10 進数などの基数の変換手法を理解する。
位取り ── どの位が、いくつ分を表しているか
ふだん使う10進数から確かめます。526 という数を、位ごとにばらします。
| 位 | 百の位 | 十の位 | 一の位 |
|---|---|---|---|
| 数字 | 5 | 2 | 6 |
| 重み | 10×10=100 | 10 | 1 |
| この位が表す数 | 5×100=500 | 2×10=20 | 6×1=6 |
500 + 20 + 6 で 526 です。当たり前に見えますが、ここで効いているのは 位が1つ左へ動くたびに、重みが10倍になるという決まりです。 この「10倍」の10を基数といいます。
基数とは
10進数 … 位が1つ左へ動くと重みが10倍。使う数字は 0〜9 の10種類
2進数 … 位が1つ左へ動くと重みが2倍。使う数字は 0 と 1 の2種類
16進数 … 位が1つ左へ動くと重みが16倍。使う数字は 0〜9 と A〜F の16種類(A・B・C・D・E・F が 10・11・12・13・14・15)
使える数字の種類が基数と同じ個数になり、種類を使い切ったら位が1つ上がります。 10進数で 9 の次に位が上がるのと同じことが、2進数では 1 の次に起きます。
2進数を10進数にする ── 重みを足す
位取りが分かっていれば、2進数から10進数への変換は足し算だけです。 1101 という2進数を、10進数にします。
| 位 | 左から1つ目 | 2つ目 | 3つ目 | 4つ目 |
|---|---|---|---|---|
| 数字 | 1 | 1 | 0 | 1 |
| 重み | 2×2×2=8 | 2×2=4 | 2 | 1 |
| この位が表す数 | 1×8=8 | 1×4=4 | 0×2=0 | 1×1=1 |
8 + 4 + 0 + 1 で 13 です。数字が 1 の位の重みだけを足すと言い換えられます。 0 の位は、いくつであっても 0 にしかならないからです。
重みは右から 1, 2, 4, 8, 16, 32, 64, 128 と倍々に増えます。 この8個を右から順に言えるようにしておくと、8桁まではその場で計算できます。 なお、2進数の1桁を1ビットといいます。「8ビット」は2進数8桁のことです。
練習
2進数の 11010 を10進数にすると、いくつですか。
10進数を2進数にする ── 2で割って、余りを後ろから読む
逆向きは、2で割った余りを書き出していく手順です。 なぜ余りが桁になるのかは、位取りで説明がつきます。2進数の一番右の位の重みは 1 で、 その左はすべて 2 の倍数です。だから2で割った余りは、一番右の位の数字そのものになります。 割った商について同じことを繰り返せば、右から順に桁が決まります。
13 を2進数にしてみます。商が 0 になるまで、2 で割り続けます。
13 ÷ 2 = 6 … 余り 1 6 ÷ 2 = 3 … 余り 0 3 ÷ 2 = 1 … 余り 1 1 ÷ 2 = 0 … 余り 1
商が 0 になったので、ここで止めます。余りを下から上へ読んで 1101。
10進数を2進数にする手順
- 商が 1 になっても、もう一度割る。1 ÷ 2 = 商 0・余り 1 です。ここでやめると、いちばん左の桁が落ちます。止めるのは商が 0 になったときです。
- 書き出した余りは、後ろから読む。最後に書いた余りが、いちばん左の桁です。書いた順のまま読むと、左右が逆の数になります。
- 出した答えを、逆向きに戻して検算する。1101 の重みを足すと 8 + 4 + 1 = 13。元の数に戻れば、桁の落ちも並びの逆も同時に確かめられます。
間違えるのは、この3か所に集中します。
練習
10進数の 25 を2進数にすると、どれですか。
16進数は4桁ずつ、8進数は3桁ずつ
16進数への変換だけは、割り算をしなくても済みます。 16 は 2 を4回かけた数なので、2進数の4桁が16進数の1桁にちょうど収まるからです。 同じ理由で、8 は 2 を3回かけた数なので、8進数は3桁ずつになります。
| 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 |
たとえば2進数の 11011010 なら、右から4桁ずつ区切って 1101 と 1010。 上の表で 1101 は D、1010 は A なので、16進数では DA です。
8進数も同じやり方です。11011010 を右から3桁ずつ区切ると 11|011|010。 それぞれ 3・3・2 なので、8進数では 332 です (検算:3×64 + 3×8 + 2 = 218。16進の DA も 13×16 + 10 = 218 で、同じ数を指しています)。
⚠️ 区切るのは右からです。桁数が4の倍数でないときは、左側に 0 を補って4桁にそろえます。 たとえば 110110 は 0011 0110 と見て 36 です。左から区切ると桁の重みがずれます。
先に、ひとつ予想してみましょう
16進数の 3F を10進数にすると、いくつですか。
16進数から10進数へ直すときは、位の重みが 1, 16, 256 と16倍ずつ増えることを使います。 A〜F は 10〜15 なので、3F なら 3×16 + 15 で 63 です。 2進数を経由しても同じで、0011 1111 の重みを足すと 32 + 16 + 8 + 4 + 2 + 1 = 63 になります。
まとめ
この回で持ち帰ること
1. 位が1つ左へ動くときの倍率が基数。2進数なら2倍、16進数なら16倍
2. 2進数→10進数は、数字が 1 の位の重み(1, 2, 4, 8, 16, 32, 64, 128)を足す
3. 10進数→2進数は、商が 0 になるまで2で割り、余りを後ろから読む
4. 2進数⇔16進数は、右から4桁ずつ区切って読み替える(8進数は3桁ずつ)。A〜F は 10〜15
次に読む
この記事で引用した資料
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
本文の例題(526・1101・13・11011010 など)と練習問題は、すべて当サイトが説明のために作ったものです。

