2進数の桁数が長くて読みづらいときの定番テクニック。「右から4桁ずつ区切って、各グループを0〜F の1文字に変える」だけで、長い2進数が短い16進数に圧縮できます。
2進数 → 16進数とは、長い 0/1 の並びを短い 0〜F の並びに圧縮する変換です。表す値は同じでも、表記が 1/4 の桁数になるので圧倒的に読みやすくなります。
たとえば10110011(8桁)を16進数に変換するとB3(たった2桁)になります。8ビットを1バイトと呼びますが、1バイト ≒ 16進数2桁という対応関係はそのまま使えます。
この変換が綺麗にできる理由は、「2進数4桁 = 16進数1桁」という綺麗な対応があるためです。2⁴ = 16 だから、2進4桁で表せる組み合わせ(16通り)がちょうど16進1桁(0〜F)と一致します。
なぜ「3桁」でも「5桁」でもなく、ちょうど「4桁」で区切るのでしょうか。その答えは2⁴ = 16 という単純な等式にあります。
2進4桁で表せる組み合わせは「ちょうど16通り」です。
・0000, 0001, 0010, ..., 1110, 1111
これが 0〜F の 16進1桁とぴったり一対一対応するため、グループ単位で機械的に置き換えるだけで変換できます。
2進4桁 ↔ 16進1桁
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
もし他の桁数だったら?
・3桁ずつだと 2³ = 8 通り → 8進数になる(16進数にならない)
・5桁ずつだと 2⁵ = 32 通り → 32進数になる
「束ねる桁数 = log₂(基数)」の関係を意識すると、何進数同士の変換でも応用が利きます。
なぜ「右から」なのか? 数の桁の重みは右端が一番低く、左に行くほど高くなります。16進1桁ぶん = 2進4桁ぶんの重みなので、右端から4桁単位で区切ると桁の境目が一致します。左端から区切ると最下位の重みが揃わず、計算結果が破綻します。
1バイト = 16進2桁: 8ビットを4ビットずつ区切ると、ちょうど16進数2桁になります。1バイトの値 0〜255 が16進では 00〜FF とコンパクトに表現できるのが、メモリダンプやカラーコードで16進数が選ばれる理由です。
実際の変換は3ステップだけです。順番が大事なので、頭から流れで覚えましょう。
・① 右端から4桁ずつグループ化する
・② 左端が4桁未満なら、左に 0 を補って4桁に揃える
・③ 各グループを 0〜F の1文字に変換して左から並べる
例1: 10110011 を16進数に変換
右から4桁ずつ: 1011 | 0011
1011 = 8+2+1 = 11 = B
0011 = 2+1 = 3
結果: B3(16)
例2: 1101011 を16進数に変換(0埋めあり)
右から4桁: 110 | 1011 ← 左が3桁
左に0を補う: 0110 | 1011
0110 = 6、1011 = B
結果: 6B(16)
暗記推奨の対応表(16通り):
| 2進4桁 | 10進 | 16進 |
|---|---|---|
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | 8 | 8 |
| 1001 | 9 | 9 |
| 1010 | 10 | A |
| 1011 | 11 | B |
| 1100 | 12 | C |
| 1101 | 13 | D |
| 1110 | 14 | E |
| 1111 | 15 | F |
覚え方のコツ:
・0〜9 はそのまま
・10〜15 が A〜F(暗記必須)
・各グループ内では2進数 → 10進数の重み計算(8, 4, 2, 1)を使う
・2進4桁の最大 1111 = 15 = F、11111111 = 255 = FF は代表的な値
上のツールで 11111111 を試してみてください。1111 1111 = FF。CSS の #FFFFFF(白)や、メモリアドレスの 0xFF など、実務でよく見る値です。