16進数とは

16進数(じゅうろくしんすう)とは、数値を「0から9までの数字」と「AからFまでのアルファベット」の合計16個の記号を使って表現する方法です。10進数では9の次に桁が上がりますが、16進数では15まで1桁で表現し、15の次(つまり10進数の16)で初めて桁が上がって「10」(いちぜろ)になります。コンピュータにとって分かりやすい2進数ですが、桁数が非常に長くなってしまい人間には読みづらいという欠点があります。そこで、2進数の4桁(0000〜1111)をちょうど1桁で表すことができる16進数が使われます。これにより、長いデータをコンパクトに、かつ人間にも見やすく整理して伝えることができます。
具体例
例えば、ホームページの背景色などを指定するカラーコードや、コンピュータのメモリ上の住所(アドレス)を指す際に16進数がよく使われます。
白色を表すカラーコード:#FFFFFF
10進数の「15」 = 16進数の「F」
10進数の「16」 = 16進数の「10」
ここで使われている「F」は10進数の「15」を意味しており、FFは「255」を表します。これにより、光の三原色(赤・緑・青)の強さをそれぞれ0から255までの段階で簡単に表現できます。
もう少し詳しく
コンピュータの世界において、なぜ「8進数」や「32進数」ではなく、「16進数」がこれほどまでに普及しているのでしょうか。その最大の理由は、現在のコンピュータシステムが情報を「8ビット(1バイト)」を基本単位として管理していることにあります。1バイト(8桁の2進数)は「00000000」から「11111111」までの値をとりますが、これをそのまま書くと長くて非常に扱いづらくなります。ここで16進数を導入すると、2進数の4桁(半バイト=ニブルと呼びます)がちょうど16進数の1桁に対応するため、8ビットのデータは必ず16進数の2桁(00からFFまで)にすっきりと収まるのです。
例えば、2進数の「10110101」というデータは、4桁ずつに分けて「1011」と「0101」として考えます。「1011」は10進数で11なので16進数では「B」、「0101」は10進数で5なので16進数では「5」となり、合わせて「B5」と極めてシンプルに表現できます。このように、16進数は2進数との変換が非常に機械的で簡単でありながら、人間にとっても視覚的に短く把握しやすいため、プログラムのエラーを解析する際に見る「ダンプリスト(メモリの内容をそのまま出力したもの)」や、ネットワークの通信パケットの解析、IPv6アドレスの表記など、ITのあらゆる低レイヤーの場面で標準的な表記法として採用されています。
試験でのポイント
試験において16進数は、2進数や10進数との相互変換の問題として頻繁に登場します。最も確実で速い解き方は、10進数から直接16進数に変換しようとするのではなく、「10進数 → 2進数 → 16進数」というように、一旦2進数を経由する方法です。2進数から16進数への変換は、前述の通り「下位から4ビットずつ区切る」だけで済むため、計算ミスを大幅に減らすことができます。
また、非常によくある間違いとして、10から15までのアルファベットの対応をずれて覚えてしまうケースがあります。「A=10、B=11、C=12、D=13、E=14、F=15」という対応関係は、指を折ってでも正確に確認する癖をつけましょう。さらに、問題文中で「0x」という接頭辞(例えば「0x1A」など)が付けられている場合は、それが16進数であることを示しているというプログラミング上の一般的なルールも、知識として押さえておくと安心です。
関連する用語
コンピュータの最も基本的な言葉である2進数や、それらの進数を相互に変換する基数変換、またメモリの内容を確認する際に用いるダンプリストなどと関連づけて理解を深めてください。