2進数・10進数・16進数の変換方法
基数変換の計算手順、よく使う値の早見表、プログラミングでの活用例をわかりやすく解説します。
基数(N進数)とは
基数とは、数を表す際に各桁で使う数字の種類の数のことです。私たちが普段使っている10進数は0〜9の10種類の数字を使います。同様に、2進数は0と1の2種類、8進数は0〜7の8種類、16進数は0〜9とA〜Fの16種類の文字を使って数を表します。
| 進数 | 基数 | 使う文字 |
|---|---|---|
| 2進数 | 2 | 0, 1 |
| 8進数 | 8 | 0, 1, 2, 3, 4, 5, 6, 7 |
| 10進数 | 10 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 |
| 16進数 | 16 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F |
16進数ではA〜Fが10〜15に対応します。大文字・小文字の区別はなく、aとAは同じ値を表します。
| 16進数 | 10進数 |
|---|---|
| A | 10 |
| B | 11 |
| C | 12 |
| D | 13 |
| E | 14 |
| F | 15 |
N進数 → 10進数の変換
N進数から10進数へ変換するには、各桁の値に「基数の累乗」を掛けて合計します。右端の桁が0乗、左に行くほど累乗が1ずつ増えます。
例: 2進数 1011 → 10進数
1×2³ + 0×2² + 1×2¹ + 1×2⁰
= 8 + 0 + 2 + 1 = 11
例: 16進数 2F → 10進数
2×16¹ + F(15)×16⁰
= 32 + 15 = 47
10進数 → N進数の変換
10進数からN進数へ変換するには、Nで割り続けて余りを逆順に並べます。商が0になるまで繰り返します。
例: 10進数 13 → 2進数
13 ÷ 2 = 6 … 余り 1
6 ÷ 2 = 3 … 余り 0
3 ÷ 2 = 1 … 余り 1
1 ÷ 2 = 0 … 余り 1
余りを逆順に読む → 1101
例: 10進数 255 → 16進数
255 ÷ 16 = 15 … 余り 15(F)
15 ÷ 16 = 0 … 余り 15(F)
余りを逆順に読む → FF
2進数 ⇔ 16進数の変換
2進数と16進数は特に相性が良く、2進数を4桁ずつグループ化するだけで16進数に変換できます。これは16 = 2⁴ であるため、2進数4桁がちょうど16進数1桁に対応するからです。
例: 2進数 10101111 → 16進数
1010 1111
↓ ↓
A F → AF
逆に16進数から2進数に変換する場合は、各桁を4桁の2進数に展開するだけです。この簡便さから、コンピュータの分野ではメモリやデータの表記に16進数がよく使われます。
よく使う値の早見表
プログラミングやIT分野でよく登場する値の10進数・2進数・8進数・16進数の対応表です。
| 10進数 | 2進数 | 8進数 | 16進数 |
|---|---|---|---|
| 0 | 0000 0000 | 000 | 00 |
| 1 | 0000 0001 | 001 | 01 |
| 7 | 0000 0111 | 007 | 07 |
| 8 | 0000 1000 | 010 | 08 |
| 10 | 0000 1010 | 012 | 0A |
| 15 | 0000 1111 | 017 | 0F |
| 16 | 0001 0000 | 020 | 10 |
| 32 | 0010 0000 | 040 | 20 |
| 64 | 0100 0000 | 100 | 40 |
| 127 | 0111 1111 | 177 | 7F |
| 128 | 1000 0000 | 200 | 80 |
| 255 | 1111 1111 | 377 | FF |
※255(FF)は1バイトで表現できる最大値、127(7F)は符号付き8ビット整数の最大値です。
プログラミングでの用途
プログラミングでは10進数以外の進数が様々な場面で使われています。
16進数の用途
CSSのカラーコード(例: #FF0000 = 赤)は16進数でRGB各色を表しています。FFは10進数で255、つまりその色の最大値です。メモリアドレスやバイナリデータの表記にも16進数が標準的に使われます。
2進数の用途
ビット演算やフラグ管理に使われます。例えば、権限管理で「読み取り=4(100)、書き込み=2(010)、実行=1(001)」のようにビットごとに権限を割り当て、OR演算で組み合わせるといった使い方です。
8進数の用途
Unixのファイルパーミッション(例: chmod 755)は8進数です。755は「所有者=7(rwx)、グループ=5(r-x)、その他=5(r-x)」を意味し、各桁が3ビットの権限に対応しています。
プログラミング言語での記法
主要なプログラミング言語での2進数・8進数・16進数のリテラル(直接記述する方法)の一覧です。いずれも10進数の10を各進数で表しています。
| 言語 | 2進数(10) | 8進数(10) | 16進数(10) |
|---|---|---|---|
| JavaScript | 0b1010 | 0o12 | 0xA |
| Python | 0b1010 | 0o12 | 0xA |
| C / Java | 0b1010 | 012 | 0xA |
| Ruby | 0b1010 | 0o12 | 0xA |
※C言語では8進数はプレフィックス「0」だけで表記します(例: 012 = 10進数の10)。意図せず8進数になるバグの原因になるため注意が必要です。
よくある質問
- Q. 16進数のA〜Fは何を意味しますか?
- 16進数では0〜9に加えてA〜Fの6つのアルファベットを使います。Aは10進数の10、Bは11、Cは12、Dは13、Eは14、Fは15に対応します。大文字・小文字の区別はなく、aとAは同じ値です。
- Q. カラーコード#FFFFFFは何進数ですか?
- カラーコード#FFFFFFは16進数です。先頭の#はカラーコードであることを示す記号で、FFFFFFはRGB各色を16進数2桁ずつ(FF=255, FF=255, FF=255)で表しています。#FFFFFFは白色を意味します。
- Q. 2進数と16進数はなぜ相性が良いのですか?
- 16は2の4乗(2⁴=16)であるため、2進数4桁がちょうど16進数1桁に対応します。このため、2進数を4桁ずつ区切るだけで16進数に変換でき、逆に16進数の各桁を4桁の2進数に展開するだけで2進数に変換できます。コンピュータ内部は2進数で動作しますが、長い2進数は読みにくいため、コンパクトな16進数で表記されることが多いのです。
- Q. 8進数はどこで使われますか?
- 8進数は主にUnix/Linuxのファイルパーミッション(アクセス権限)で使われます。chmod 755のように3桁の8進数で「所有者・グループ・その他」の権限を表します。各桁は3ビット(読み取り4+書き込み2+実行1)に対応しており、7は全権限(rwx)、5は読み取りと実行(r-x)を意味します。