私たちは日常生活で数を表すときに10進法を使っています。
例えば、123という数は、100の位、10の位、1の位というように10を基準とした位で表されています。
一方で、コンピュータの内部では電気信号の状態によって情報を扱うため、主に2進法が用いられます。
また、2進数は桁数が長くなりやすいため、まとめて表現する方法として16進法もよく使われます。
この記事では、情報Ⅰで扱う「数値の表現」として、10進法、2進法、16進法の基本と、それぞれの進数の変換方法について説明します。
進数とは何か
進数とは、数を表すときの表し方の一つであり、決められた数の記号を使って数を表します。
例えば、10進法では0から9までの10種類の数字を使います。
一方、2進法では0と1の2種類の数字だけを使います。
また、16進法では0から9までの数字と、AからFまでの文字を使います。
それぞれの進数では、桁が左に進むほど大きな値を表します。
例えば10進数の123は、次のような意味になります。
123
=100+20+3
同じように、2進数や16進数でも桁ごとに決まった値を持って数を表します。
10進法・2進法・16進法の特徴
各進数の特徴は次の通りです。
| 進数 | 使用する数字 | 特徴 |
|---|---|---|
| 10進法 | 0〜9 | 日常生活で使う |
| 2進法 | 0、1 | コンピュータ内部で使用 |
| 16進法 | 0〜9、A〜F | 2進数を短く表現できる |
10進法・2進法・16進法の対応表
10進数、2進数、16進数は次のように対応しています。
| 10進数 | 2進数 | 16進数 |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 2 | 0010 | 2 |
| 3 | 0011 | 3 |
| 4 | 0100 | 4 |
| 5 | 0101 | 5 |
| 6 | 0110 | 6 |
| 7 | 0111 | 7 |
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 12 | 1100 | C |
| 13 | 1101 | D |
| 14 | 1110 | E |
| 15 | 1111 | F |
この表は、特に2進数と16進数の変換を行うときに役立ちます。
2進法から10進法への変換
位の重みを用いた計算方法
2進数を10進数に変換する場合は、各桁(位)に対応する2の累乗を掛けて合計します。
つまり、最も下の位には2の0乗、次の位には2の1乗、次の位には2の2乗といった感じで、最下位の位から順に乗数を増やした値を乗算していきます。
そして、これにより得られた値を合算します。
この説明だとわかりにくいと思いますが、計算例を見ていただければ理解できると思います。
計算例
例:1011₂
1011₂
=1×2³+0×2²+1×2¹+1×2⁰
=8+0+2+1
=11₁₀
最も下位の1には2の0乗を乗算、次の位の1には2の1乗を乗算、次の位の0には2の2乗を乗算、次の位の1には2の3乗を乗算しています。
そして、これらを足し合わせると、答えは11になります。
10進法から2進法への変換
2で割る方法(除算と余り)
10進数を2進数に変換する場合は、数を2で割り続けて余りを求めます。
余りを下から上に読むことで2進数になります。
計算例
例:13₁₀
| 計算 | 余り |
|---|---|
| 13÷2=6 | 1 |
| 6÷2=3 | 0 |
| 3÷2=1 | 1 |
| 1÷2=0 | 1 |
下から読むと
1101₂
10進法から16進法への変換
16で割る方法
10進数から16進数へ変換するときは、16で割り続けて余りを求めます。余りを下から読むと16進数になります。
A〜Fの表記
余りが10以上の場合は次の文字を使います。
- 10 → A
- 11 → B
- 12 → C
- 13 → D
- 14 → E
- 15 → F
計算例
例:26₁₀
| 計算 | 余り |
|---|---|
| 26÷16=1 | 10 |
10はAなので
1A₁₆
2進法から16進法への変換
4ビットごとの対応関係
2進数と16進数は、次の関係があります。
16=2⁴
そのため、2進数4桁が16進数1桁に対応します。
2進法を16進法に変換する場合、2進数を4桁(4ビット)に区切り、それぞれを16進数に変換します。
変換例
例:11010110₂
4桁ごとに区切ります。
1101 0110
それぞれを対応表で確認すると
1101 → D
0110 → 6
したがって
D6₁₆
16進法から2進法への変換
1桁を4ビットに変換する方法
16進法から2進法への変換は、2進法から16進法への変換と同様の考え方で行えばいいです。
つまり、16進数1桁は、対応する4桁の2進数に変換できます。
変換例
例:3A₁₆
3 → 0011
A → 1010
したがって
00111010₂
16進法から10進法への変換
2進法を経由する方法
16進数から10進数へ変換する場合は、いったん2進数に変換してから10進数に変換する方法があります。
16進数1桁は4桁の2進数に対応しているため、この対応関係を利用します。
計算例
例:2F₁₆
まず16進数を2進数に変換します。
2 → 0010
F → 1111
したがって
2F₁₆
=00101111₂
次に、この2進数を10進数に変換します。
00101111₂
=0×2⁷+0×2⁶+1×2⁵+0×2⁴+1×2³+1×2²+1×2¹+1×2⁰
=32+8+4+2+1
=47₁₀
確認問題
問題1
次の2進数を10進数に変換しなさい。
1101₂
問題2
次の10進数を2進数に変換しなさい。
18₁₀
問題3
次の10進数を16進数に変換しなさい。
45₁₀
問題4
次の2進数を16進数に変換しなさい。
10111100₂
問題5
次の16進数を2進数に変換しなさい。
A7₁₆
問題6
次の16進数を10進数に変換しなさい。
ただし、2進数を経由して求めなさい。
3C₁₆
確認問題の解答
問題1
1101₂
=1×2³+1×2²+0×2¹+1×2⁰
=8+4+0+1
=13₁₀
問題2
18₁₀
18÷2=9 余り0
9÷2=4 余り1
4÷2=2 余り0
2÷2=1 余り0
1÷2=0 余り1
下から読むと
10010₂
問題3
45₁₀
45÷16=2 余り13
13はDなので
2D₁₆
問題4
10111100₂
4桁ごとに区切る
1011 1100
1011 → B
1100 → C
BC₁₆
問題5
A7₁₆
A → 1010
7 → 0111
したがって
10100111₂
問題6
3C₁₆
まず2進数に変換する
3 → 0011
C → 1100
00111100₂
これを10進数に変換する
00111100₂
=1×2⁵+1×2⁴+1×2³+1×2²
=32+16+8+4
=60₁₀
まとめ
コンピュータでは数値を扱うために複数の進数が使われます。
- 日常生活では10進法を使用する
- コンピュータ内部では2進法が使われる
- 2進数を短く表すために16進法が利用される
進数変換では、次の考え方が重要です。
- 桁の値を計算して求める方法
- 割り算と余りを使う方法
- 2進数4桁と16進数1桁の対応
これらを理解することで、コンピュータが数値をどのように表現しているかを理解できます。
