16進数をひとことで言うと
16進数は基数が16の位取り記数法です。各桁の重みは右隣の桁の16倍で、10~15の値はA~Fのアルファベットで表します。数値が16進数であることを示すために、プログラマーは0x1A(C、Java、JavaScript、Python)、CSSのカラーでは#1A2B3C、アセンブリ言語では1Ah、数学では1A₁₆のように書きます。
0から15までの16進数の対応表
| 10進数 | 16進数 | 2進数 | 10進数 | 16進数 | 2進数 |
|---|---|---|---|---|---|
| 0 | 0 | 0000 | 8 | 8 | 1000 |
| 1 | 1 | 0001 | 9 | 9 | 1001 |
| 2 | 2 | 0010 | 10 | A | 1010 |
| 3 | 3 | 0011 | 11 | B | 1011 |
| 4 | 4 | 0100 | 12 | C | 1100 |
| 5 | 5 | 0101 | 13 | D | 1101 |
| 6 | 6 | 0110 | 14 | E | 1110 |
| 7 | 7 | 0111 | 15 | F | 1111 |
16進数の数え方
16進数は10進数と同じように数えますが、9の次ではなくFの次で桁が繰り上がります:… 8、9、A、B、C、D、E、F、10、11 … 19、1A … 1F、20 … FF、100。ここで10は16、100は16 × 16 = 256を意味します。16進数2桁で1バイト(00~FF = 0~255)を表し、4桁ならFFFF = 65,535まで、8桁ならFFFFFFFF = 4,294,967,295まで表せます。
コンピューターで16進数が使われる理由
コンピューターはすべてを2進数で記録していますが、0と1が長く並ぶと人間には読みにくく、入力ミスも起こりがちです。16 = 2⁴なので、16進数の1桁はちょうど4ビット(ニブル)、2桁で1バイトに対応します。16進数と2進数の変換は1桁ずつ置き換えるだけで済み、しかも長さは4分の1です。1101 1110 1010 1101もDEADと書くだけです。10進数と2進数の間にはこのような単純な関係がないため、生のデータを表すのに10進数が使われることはほとんどありません。
16進数と10進数・2進数の変換方法
- 16進数→10進数:各桁にその位置の16の累乗を掛けて足します。
2F= 2 × 16 + 15 = 47、1A3F= 1 × 4096 + 10 × 256 + 3 × 16 + 15 = 6719。 - 10進数→16進数:16で割り続け、余りを逆順に読みます。200 ÷ 16 = 12 余り8で、12 = Cなので、200 =
C8。 - 16進数→2進数:各桁を4ビットに置き換えます。
2F=0010 1111。
当サイトの変換ツールなら、これらの計算を瞬時に行い、すべての計算過程を表示します。
16進数が使われている場面
- Webのカラーコード:
#FF6347は赤FF、緑63、青47です。 - メモリアドレス:デバッガーやクラッシュレポートには
0x7FFE5A3Cのようなポインタが表示されます。 - MACアドレス:
00:1A:2B:3C:4D:5Eのような6バイトの値でネットワークカードを識別します。 - IPv6アドレス:16進数4桁のグループ8つで構成され、たとえば
2001:db8::1のように書きます。 - Unicode:すべての文字に16進数のコードポイントがあり、
U+00E9はé、U+1F600は😀です。 - ハッシュ値とID:SHA-256のハッシュ値は16進数64文字で、UUIDやGitのコミットIDも16進数で書かれます。
- 16進ダンプ:バイナリエディタはファイルの中身を1バイトずつ表示します。PDFファイルは必ず
25 50 44 46(「%PDF」)で始まります。 - エラーコード:Windowsは
0x80070005(アクセス拒否)のようなエラーコードを表示します。
16進数・10進数・8進数・2進数の比較
| 記数法 | 基数 | 使う数字 | 255の表記 | 主な用途 |
|---|---|---|---|---|
| 2進数 | 2 | 0–1 | 11111111 | ハードウェア、ビットフラグ |
| 8進数 | 8 | 0–7 | 377 | Unixのファイルパーミッション(chmod 755) |
| 10進数 | 10 | 0–9 | 255 | 日常で使う数 |
| 16進数 | 16 | 0–9、A–F | FF | バイト、カラー、アドレス、ハッシュ値 |
16進数での負の数の表し方
16進数そのものには符号を表す特別な記号がないため、負の数は通常2の補数で格納されます。固定長の値の最上位ビットが1なら、その値は負の数です。符号付き1バイトでは7Fは127、80は−128、FFは−1です。32ビット整数ではFFFFFFFFが−1になります。数学や当サイトの計算機では、単にマイナス記号を付けて書くこともできます:−1A = −26。
よくある質問
16進数でアルファベットを使うのはなぜですか?
16進数では1文字で表せる数字が16種類必要ですが、数字は10種類しかありません。そこでA~Fの文字で10~15の値を表します。大文字と小文字は同じ意味で、ff = FF = 255です。
数値の前に付いている0xはどういう意味ですか?
C、C++、Java、JavaScript、Pythonなど多くの言語で、その数値が16進数であることを示します。0x10は10ではなく16です。CSSではカラーに#を使い、アセンブリ言語では末尾にhを付けることがよくあります(10h)。
16進数とBase64は同じですか?
いいえ。16進数は各バイトを0~9とA~Fの2文字で書くため、データ量は2倍になりますが、1バイトずつ読みやすいままです。Base64は64種類の文字を使い、3バイトを4文字にまとめるので、よりコンパクト(増加は約33%)ですが、バイト単位では読めません。
最終更新日: