16進2桁の各位を「+」「−」で変えると、10進数と2進8ビットがリアルタイムに連動。「2進数4桁=16進数1桁」の対応で長い2進数を半分の桁数で扱える仕組みを学びます。
16進数とは、0〜9とA〜Fの16種類の記号で数を表す方法です。10進数では「9の次は10」ですが、16進数では 「9の次がA、その次がB、…F、その次が10」になります。
各桁の重みは16のべき乗です。右から順に 1, 16, 256, 4096, ... となります。
・16進数の A = 10(10進)
・16進数の FF = 16×15 + 1×15 = 255(10進、2桁の最大)
・プログラム中では 0x や末尾の H を付けて区別(例:0xFF / FFH)
上のツールでプリセット「10」「15」「16」を順に選んでみてください。10進10は16進ではちょうど「A」、10進15は「F」、10進16は桁上がりして「10」(16進)になります。
16進数のもう一つの特徴は、2進数4桁=16進数1桁という対応関係があることです。2進数4桁で表せる組み合わせは 2⁴ = 16通り、ちょうど16進数1桁の数(0〜F)と一致するためです。
| 16進 | 10進 | 2進4桁 |
|---|---|---|
| 0 | 0 | 0000 |
| 1 | 1 | 0001 |
| 2 | 2 | 0010 |
| 3 | 3 | 0011 |
| 4 | 4 | 0100 |
| 5 | 5 | 0101 |
| 6 | 6 | 0110 |
| 7 | 7 | 0111 |
| 8 | 8 | 1000 |
| 9 | 9 | 1001 |
| A | 10 | 1010 |
| B | 11 | 1011 |
| C | 12 | 1100 |
| D | 13 | 1101 |
| E | 14 | 1110 |
| F | 15 | 1111 |
この対応のおかげで、2進数↔16進数の変換は「4桁ずつ区切って読むだけ」で可能です。たとえば 10101010 を右から4桁ずつ区切ると 1010 1010、それぞれA, Aなので AA(16進)です。
上のツールでプリセット「170」を選ぶと、まさにこのAA=1010 1010のパターンが見られます。16進1桁を1つ動かすたびに2進4ビットがガラッと変わる連動を確かめてください。
16進数が実務でこれほど広く使われる理由は、2進数の桁数を1/4に圧縮できるためです。8ビットの2進数 11111111 を「FF」と書けば、人間にとってずっと読みやすくなります。
身近な例で見ると、16進数は次のような場面で登場します。
・メモリアドレス:0x7FFE4A20 のように表記
・カラーコード:CSS の #FF0000(赤)は R=FF, G=00, B=00
・MACアドレス:AC:DE:48:00:11:22
・ASCIIコード表:「A」は 0x41、「a」は 0x61
16進数 ↔ 10進数、16進数 ↔ 2進数の変換はよく使います。特に「2進数 → 16進数は4桁ずつ区切る」というルールを身につけておくと、桁数が多くても素早く処理できるようになります。
16進数を使う最大の理由は「短く書けて、しかも2進数と簡単に変換できる」ことです。コンピュータは内部で2進数を使っていますが、2進数は桁数が多くて人間には読みにくい。10進数は読みやすいけれど2進数との変換が面倒。16進数はその両方の問題を一気に解決します。
なぜ2進数との変換が簡単なのか。それは 16 = 2の4乗だからです。2進数4桁(例: 1111)で表せる種類がちょうど16通り(0〜15)あり、16進数1桁と完全に一致します。つまり2進数4桁と16進数1桁は1対1で対応していて、機械的に置き換えるだけで変換できます。
・2進数4桁 0000 ↔ 16進 0
・2進数4桁 1010 ↔ 16進 A(10)
・2進数4桁 1111 ↔ 16進 F(15)
これを実感するには、上のツールでどちらかの桁を変えてみてください。16進1桁を変えると対応する2進4ビットだけがガラッと変わり、もう片方の桁は全くそのままです。これが「4桁単位で独立して変換できる」証拠です。
2進数 → 16進数の変換手順は3ステップだけです。
・① 2進数を右から4桁ずつ区切る(左端が4桁に足りなければ 0 を補う)
・② 各グループを16進数1桁に置き換える(上の変換表が使える)
・③ 並べると16進数の完成
16進数 → 2進数の変換は逆の操作です。16進数の各桁を4ビットの2進数に展開して、そのまま並べるだけです。例えば B5 なら B=1011、5=0101 なので 10110101 です。
10進数との変換は少し手間がかかります。「10進数 → 16進数」は16で割り続けて余りを逆から読む(割り算法)、「16進数 → 10進数」は各桁×16のべき乗を足す(重み計算)で求めます。上のツールの計算式パネルが重み計算を視覚的に表示してくれますので、いろいろな数で試してみてください。