進数変換のやり方 - 完全ガイド
この完全ガイドでは、2進数、8進数、10進数、16進数の間での変換方法を詳しく解説します。コンピュータサイエンスやプログラミングにおいて不可欠な進数変換のテクニックを、初心者から上級者まで理解できるよう段階的に説明していきます。
目次
10進数から2進数への変換方法
10進数から2進数への変換は、「除算と剰余」の方法を使って行います。具体的な手順は次の通りです:
- 変換したい10進数を2で割ります
- 商と余りを記録します(余りは0か1)
- 商を再び2で割り、新しい商と余りを記録します
- 商が0になるまでこのプロセスを繰り返します
- 最後に、記録した余りを下から上へ(最後から最初へ)読み上げると、これが2進数表現となります
例: 10進数の「25」を2進数に変換する
12 ÷ 2 = 6 余り 0
6 ÷ 2 = 3 余り 0
3 ÷ 2 = 1 余り 1
1 ÷ 2 = 0 余り 1
結果: 11001 (下から上へ読む)
この方法では、余りを下から上へ読むことに注意してください。つまり、最後に得られた余りが最上位ビット(最も左側のビット)になります。
ヒント: 2で割る操作は、最下位ビット(最も右側のビット)から決定していきます。余りが1なら「オン」、0なら「オフ」と考えると理解しやすいでしょう。
視覚的な理解を助ける図
| ステップ | 計算 | 商 | 余り (ビット) |
|---|---|---|---|
| 1 | 25 ÷ 2 | 12 | 1 (2^0 の位) |
| 2 | 12 ÷ 2 | 6 | 0 (2^1 の位) |
| 3 | 6 ÷ 2 | 3 | 0 (2^2 の位) |
| 4 | 3 ÷ 2 | 1 | 1 (2^3 の位) |
| 5 | 1 ÷ 2 | 0 | 1 (2^4 の位) |
上の表を見ると、10進数の25は2進数では11001と表現できることがわかります。各ビットは、右から左へ2^0, 2^1, 2^2, 2^3, 2^4の位に対応しています。
2進数から10進数への変換方法
2進数から10進数への変換は、「位取り展開法」を使って行います。具体的な手順は次の通りです:
- 2進数の各桁(ビット)に位の値を割り当てます(右から左へ2^0, 2^1, 2^2, ...)
- 各ビットの値(0または1)に、その位の値を掛けます
- 全ての結果を合計すると、10進数の値になります
例: 2進数の「101101」を10進数に変換する
0 × 2^4 = 0 × 16 = 0
1 × 2^3 = 1 × 8 = 8
1 × 2^2 = 1 × 4 = 4
0 × 2^1 = 0 × 2 = 0
1 × 2^0 = 1 × 1 = 1
合計: 32 + 0 + 8 + 4 + 0 + 1 = 45
したがって、2進数の101101は10進数では45です。
理解のポイント: 2進数では、各桁が「2のべき乗」の重みを持っています。右から1, 2, 4, 8, 16, 32, ...と進んでいきます。
視覚的な理解を助ける図
| 桁の位置 | 2^5 (32) | 2^4 (16) | 2^3 (8) | 2^2 (4) | 2^1 (2) | 2^0 (1) |
|---|---|---|---|---|---|---|
| ビットの値 | 1 | 0 | 1 | 1 | 0 | 1 |
| 計算 | 1×32=32 | 0×16=0 | 1×8=8 | 1×4=4 | 0×2=0 | 1×1=1 |
上の表を見ると、各桁の寄与を合計して10進数の値45が得られることがわかります。
10進数から8進数への変換方法
10進数から8進数への変換は、2進数への変換と同様のプロセスですが、除数として8を使用します。
- 変換したい10進数を8で割ります
- 商と余りを記録します(余りは0〜7の範囲)
- 商を再び8で割り、新しい商と余りを記録します
- 商が0になるまでこのプロセスを繰り返します
- 最後に、記録した余りを下から上へ読み上げると、これが8進数表現となります
例: 10進数の「125」を8進数に変換する
15 ÷ 8 = 1 余り 7
1 ÷ 8 = 0 余り 1
結果: 175 (下から上へ読む)
したがって、10進数の125は8進数では175と表現されます。
注意点: 8進数は0〜7の数字のみを使用します。したがって、余りが7より大きくなることはありません。
8進数から10進数への変換方法
8進数から10進数への変換も、2進数から10進数への変換と同様に「位取り展開法」を使用しますが、今回は基数が8です。
- 8進数の各桁に位の値を割り当てます(右から左へ8^0, 8^1, 8^2, ...)
- 各桁の数字(0〜7)にその位の値を掛けます
- 全ての結果を合計すると、10進数の値になります
例: 8進数の「347」を10進数に変換する
4 × 8^1 = 4 × 8 = 32
7 × 8^0 = 7 × 1 = 7
合計: 192 + 32 + 7 = 231
したがって、8進数の347は10進数では231です。
応用場面: 8進数はUNIXシステムのファイル権限設定などで使用されています。例えば、chmod 755 というコマンドは、8進数表記でファイル権限を指定しています。
10進数から16進数への変換方法
10進数から16進数への変換も基本的なプロセスは同じですが、16進数では10〜15の値をA〜Fのアルファベットで表現する点が特徴です。
- 変換したい10進数を16で割ります
- 商と余りを記録します(余りは0〜15の範囲、10〜15はA〜Fで表記)
- 商を再び16で割り、新しい商と余りを記録します
- 商が0になるまでこのプロセスを繰り返します
- 最後に、記録した余りを下から上へ読み上げると、これが16進数表現となります
例: 10進数の「250」を16進数に変換する
15 ÷ 16 = 0 余り 15 (F)
結果: FA (下から上へ読む)
したがって、10進数の250は16進数ではFAと表現されます。
16進数の数字表記: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10), B(11), C(12), D(13), E(14), F(15)
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進数 | 8 | 9 | A | B | C | D | E | F |
16進数から10進数への変換方法
16進数から10進数への変換も、位取り展開法を使用しますが、今回は基数が16です。アルファベットA〜Fは、それぞれ10〜15の値に置き換えて計算します。
- 16進数の各桁に位の値を割り当てます(右から左へ16^0, 16^1, 16^2, ...)
- 各桁の数字(0〜F)にその位の値を掛けます(A=10, B=11, C=12, D=13, E=14, F=15)
- 全ての結果を合計すると、10進数の値になります
例: 16進数の「1A3」を10進数に変換する
A(10) × 16^1 = 10 × 16 = 160
3 × 16^0 = 3 × 1 = 3
合計: 256 + 160 + 3 = 419
したがって、16進数の1A3は10進数では419です。
実用例: Webデザインではカラーコードが#FFFFFFのような16進数形式で表現されます。この場合、RGB値はそれぞれ255, 255, 255(純白)を表しています。
2進数と16進数の直接変換
2進数と16進数の間には特別な関係があります。16は2の4乗であるため、2進数の4桁が16進数の1桁に対応します。これにより、10進数を経由せずに直接変換が可能です。
2進数から16進数への変換
- 2進数を右から左へ4桁ずつグループ分けします(必要に応じて左側に0を追加)
- 各4桁グループを対応する16進数の数字に変換します
- 変換した数字を左から右へ並べると、16進数表現が得られます
例: 2進数の「110110101111」を16進数に変換する
グループ分け: 0011 0110 1011 1111
0011 = 3
0110 = 6
1011 = B
1111 = F
結果: 36BF
4ビットと16進数の対応表
| 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 |
16進数から2進数への変換
16進数から2進数への変換は上記のプロセスの逆です:
- 16進数の各桁を対応する4桁の2進数に変換します
- 変換した2進数を順番に並べると、2進数表現が得られます
例: 16進数の「A7」を2進数に変換する
7 = 0111
結果: 10100111
効率化のポイント: プログラマーは長い2進数を扱う際、16進数表記を使うことで桁数を大幅に削減できます。例えば、32ビットの2進数は8桁の16進数で表現できます。
2進数と8進数の直接変換
2進数と8進数の間にも特別な関係があります。8は2の3乗であるため、2進数の3桁が8進数の1桁に対応します。
2進数から8進数への変換
- 2進数を右から左へ3桁ずつグループ分けします(必要に応じて左側に0を追加)
- 各3桁グループを対応する8進数の数字に変換します
- 変換した数字を左から右へ並べると、8進数表現が得られます
例: 2進数の「11010111」を8進数に変換する
グループ分け: 011 010 111
011 = 3
010 = 2
111 = 7
結果: 327
3ビットと8進数の対応表
| 2進数 | 8進数 | 2進数 | 8進数 |
|---|---|---|---|
| 000 | 0 | 100 | 4 |
| 001 | 1 | 101 | 5 |
| 010 | 2 | 110 | 6 |
| 011 | 3 | 111 | 7 |
8進数から2進数への変換
8進数から2進数への変換は上記のプロセスの逆です:
- 8進数の各桁を対応する3桁の2進数に変換します
- 変換した2進数を順番に並べると、2進数表現が得られます
例: 8進数の「53」を2進数に変換する
3 = 011
結果: 101011
進数変換早見表
下の表は、0から15までの数値の2進数、8進数、10進数、16進数の表記をまとめたものです。この表を参照することで、小さな数値の変換が簡単に行えます。
| 10進数 | 2進数 | 8進数 | 16進数 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
覚えておくと便利: 10進数の10は、2進数では1010、8進数では12、16進数ではAとなります。このような基本的な対応関係を覚えておくと、変換作業が速くなります。
実践的な変換例
進数変換の知識は、コンピュータサイエンスやプログラミングの様々な場面で役立ちます。以下にいくつかの実践的な例を紹介します。
IPアドレスの表現
IPアドレスは通常、10進数のドット区切り形式で表現されますが、ネットワーク設定では2進数やサブネットマスクの理解が必要です。
IPアドレス: 192.168.1.1
2進数表現: 11000000.10101000.00000001.00000001
16進数表現: C0.A8.01.01
RGBカラーコード
Webデザインで使用されるRGBカラーコードは、16進数で表現されることが一般的です。
赤色:
RGB(255, 0, 0)
16進数: #FF0000
青色:
RGB(0, 0, 255)
16進数: #0000FF
コンピュータメモリのアドレス
低レベルプログラミングやデバッグでは、メモリアドレスが16進数で表現されることが多いです。
メモリアドレス (16進数): 0x7FFFF7A26000
10進数表現: 140737345860608
ファイル権限(Unixシステム)
Unixベースのシステムでは、ファイル権限が8進数で表現されることが一般的です。
chmod 755 file.txt
7 (所有者) = 111 (2進数) = 読み込み・書き込み・実行
5 (グループ) = 101 (2進数) = 読み込み・実行
5 (その他) = 101 (2進数) = 読み込み・実行
よくある間違いと対策
進数変換を行う際によくある間違いとその対策をいくつか紹介します。
間違い: 余りの順序を間違える
10進数から他の進数に変換する際、余りを上から下へ読んでしまう。
対策: 余りは必ず下から上へ(最後から最初へ)読むことを覚えておきましょう。あるいは、余りを右から左へ書いていくという方法もあります。
間違い: 16進数のアルファベットを間違える
16進数の10〜15を表すA〜Fを混同してしまう。
対策: A=10, B=11, C=12, D=13, E=14, F=15 という対応関係を覚えておきましょう。またはチートシートを用意しておくと便利です。
間違い: 桁の重みを間違える
2進数や16進数から10進数に変換する際、桁の重みを間違える。
対策: 桁の重みは右から左へ順に基数の0乗、1乗、2乗...となることを確認しましょう。例えば、2進数なら1, 2, 4, 8, 16...、16進数なら1, 16, 256, 4096...となります。
間違い: 2進数と16進数の直接変換でグループ分けを間違える
2進数と16進数の変換で、4ビットのグループ分けを間違える。
対策: 2進数は必ず右から左へ4桁ずつグループ分けします。足りない桁には左側に0を補います。例えば「101」は「0101」としてグループ分けします。
進数変換のコツ: 最初のうちは、自分の計算結果を検証するために、変換前の値に戻してみるという方法が有効です。例えば、10進数から2進数に変換した後、その2進数を10進数に戻して元の値と一致するか確認しましょう。