16進数の読み書き入門|暗算なしでスッと読めるようにするコツ
16進が読めると何が変わるか
#3b82f6 を見て「青系の色だ」と一瞬で判断する。0xFF00 を見て「下位バイトが全0、上位バイトが全1」と把握する。これが16進が読める状態です。
進数変換ツール で正確な値を出すのは大事ですが、ざっくり読めるだけで大幅に作業が速くなります。本記事はその「ざっくり感」を作るコツを書きます。
16進の文字対応表
| 16進 | 10進 | 2進 |
|---|---|---|
| 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 |
A-F = 10-15 だけ覚えれば、後は順番です。
1バイト = 16進2桁
これが最重要のルールです。8bit = 16進2桁。
00 = 0
0F = 15
10 = 16
FF = 255(1バイトの最大値)
0xFF を見たら「これは1バイトの最大値、255」と即答できるように。
256ぴったりは何になる?
FF + 1 = 100 (16進では桁上がり)
10進の256は16進では 100 です。つまり16進3桁は256〜4095を表します。
「左の桁ほど大きい」感覚
F000 = 61440
0F00 = 3840
00F0 = 240
000F = 15
各桁は 16倍ずつ重みが変わります。10進の100, 10, 1 と同じ感覚で、16進では4桁目=4096、3桁目=256、2桁目=16、1桁目=1。
色コードを「読む」
#RRGGBB ← 各成分1バイト
例1: #FF0000
R=FF(255)、G=00(0)、B=00(0)→ 赤
例2: #FFFFFF
全成分255 → 白
例3: #3b82f6
R=3B(59)、G=82(130)、B=F6(246)→ B が圧倒的に強い → 青系
「Bだけ大きいから青」「全部大きいから白」「Rだけ大きいから赤」という桁の比較ができれば色がだいたいわかります。
例4: #888888
全部88(136)= 中間グレー → 灰色
16進3桁省略形
CSSでは #fff と書くと #ffffff と同じ。各成分が同じ桁の繰り返しなら省略可能。
バイト列を「読む」
hexdump: 41 42 43 44 0A
ASCIIコードとして読むと:
| Hex | Char |
|---|---|
| 41 | A |
| 42 | B |
| 43 | C |
| 44 | D |
| 0A | LF(改行) |
→ 文字列 "ABCD\n"。
0x20 がスペース、0x30 が 0、0x41 が A、0x61 が a、0x7F が DEL、というのを覚えると、ダンプを眺めて文字列のあたりがつくようになります。
メモリアドレスの「桁感」
| アドレス | 範囲 |
|---|---|
0x00000000 | 0 |
0x0000FFFF | 65,535(16bit境界) |
0xFFFFFFFF | 4,294,967,295(32bit境界、約43億) |
0x0000FFFF FFFFFFFF | 約281兆(48bit) |
0xFFFFFFFF FFFFFFFF | 64bit最大値 |
64bitポインタなら16進16桁。0x7fff で始まるとスタック領域、0x55.. だとPIE有効バイナリ、0xffff.. だとカーネル領域、というふうに先頭桁から領域がわかることもあります。
2進と16進の即時変換
1010 = A
1100 = C
0011 = 3
4ビットを1グループに区切って16進1桁に変換するだけ。これを覚えると2進⇔16進が暗算できます。
2進: 1010 1100 0011
↓
16進: A C 3
↓
全体: 0xAC3
よく出る16進数の意味
| 値 | 意味 |
|---|---|
0xFF | 1バイトの最大値(255) |
0xFFFF | 16bit最大(65535) |
0xFFFFFFFF | 32bit最大(約43億) |
0x80 | 1バイトの符号ビット(128) |
0xCAFEBABE | Javaクラスファイルのマジックナンバー |
0xDEADBEEF | デバッグでよく使う4バイト |
0x7FFFFFFF | 32bit符号付き最大(約21億) |
0x10000000 | 16進が桁上がりする境界 |
「キリのいい16進」を覚えておくと、ログやエラーメッセージに出てきたときにピンときます。
「読めない」ときは即変換
無理に頭で計算する必要はありません。怪しいと思ったらすぐ 進数変換ツール に貼って確認するのが早いです。
速度より正確性。
関連記事
16進は「コンピュータと人間の妥協点」。慣れると暗算なしで雰囲気がわかるようになります。