プログラミングやコンピューターサイエンスを学ぶ中で必ず登場するのが「16進数」です。
16進数とは、0から9の数字にアルファベットのAからFを加えた16種類の記号を使って数値を表す数体系のことです。
コンピューターの内部では2進数が使われていますが、2進数は桁数が多くなりすぎるため、人間が扱いやすい16進数で表記されることが多いのです。
本記事では、16進数の意味・仕組み・10進数との違い・表記法・実際の用途まで、わかりやすく解説していきます。
16進数とは何か?基本的な意味と仕組み
それではまず、16進数の基本的な意味と仕組みについて解説していきます。
16進数(hexadecimal)とは、16を基数(底)とする数体系のことです。
私たちが日常生活で使っている10進数は0〜9の10種類の数字を使い、10になると次の桁に繰り上がります。
一方、16進数は0〜9の数字とA〜Fのアルファベット(合計16種類)を使い、16になると次の桁に繰り上がる仕組みです。
16進数で使用する16種類の記号と10進数との対応
0=0、1=1、2=2、3=3、4=4、5=5、6=6、7=7
8=8、9=9、A=10、B=11、C=12、D=13、E=14、F=15
16になると「10」と表記(次の桁に繰り上がる)
AからFのアルファベットは大文字・小文字のどちらでも表記できますが、プログラミングでは慣例や言語の規則に従って使い分けることが多いでしょう。
16進数の1桁は4ビット(2進数4桁)に対応しており、2進数との相互変換が非常に簡単なのが大きな特徴です。
基数とは何か
数体系を理解するうえで重要な概念が「基数(底)」です。
基数とは、位取り記数法において何種類の記号を使うかを示す数のことです。
10進数の基数は10、2進数の基数は2、8進数の基数は8、そして16進数の基数は16となります。
基数が大きいほど1桁で表せる情報量が多くなり、同じ数値を表すのに必要な桁数が少なくなる特徴があります。
コンピューターで使われる主な数体系はこの4種類であり、それぞれ相互に変換することができるでしょう。
10進数と16進数の違い
日常生活で使う10進数と16進数の違いを具体的な数値で比較してみましょう。
| 10進数 | 16進数 | 2進数 |
|---|---|---|
| 0 | 0 | 0000 |
| 10 | A | 1010 |
| 15 | F | 1111 |
| 16 | 10 | 0001 0000 |
| 255 | FF | 1111 1111 |
| 256 | 100 | 0001 0000 0000 |
255を例にとると、10進数では3桁、16進数では「FF」の2桁、2進数では「11111111」の8桁で表されます。
このように、16進数は2進数の情報をコンパクトに表現できるという大きなメリットがあるのです。
16進数の読み方と表記法
16進数の読み方にはいくつかの流儀があります。
「FF」であれば「エフエフ」または「255(10進数読み)」と読むことが多く、プログラミングの文脈では16進数であることを明示するための表記法が使われます。
代表的な表記法として、Cや多くのプログラミング言語では「0xFF」のように先頭に「0x」を付ける方法があります。
アセンブリ言語では「FFh」のように末尾に「h」を付ける表記が使われることもあるでしょう。
HTMLやCSSのカラーコードでは「#FF5733」のように先頭に「#」を付ける表記が標準となっています。
16進数が使われる主な用途と活用シーン
続いては、16進数が実際に使われる主な用途と活用シーンを確認していきます。
16進数はプログラミングからWebデザインまで、さまざまな場面で活用されています。
メモリアドレスとデバッグでの活用
コンピューターのメモリアドレスは、一般的に16進数で表記されます。
プログラムのデバッグ時に表示されるメモリアドレス「0x7FFE4B3A」のような表記は、16進数の典型的な使用例です。
2進数で表すと非常に長い桁数になるアドレスを、16進数で表記することでコンパクトかつ可読性の高い形式で扱えるというメリットがあります。
16進数1桁が4ビットに対応するため、8ビット(1バイト)は常に16進数2桁で表せるという規則性も、コンピューター系の作業をしやすくしているでしょう。
文字コードとエンコードでの活用
文字コードの世界でも16進数は広く使われています。
ASCII文字コードでは、アルファベット「A」は10進数で65、16進数では「41」と表されます。
URLエンコード(パーセントエンコーディング)では「%E3%81%82」のように特殊文字を16進数のバイト列で表現する方式が使われており、Webシステムでは必須の知識です。
Unicodeの文字コードポイントも「U+3042(あ)」のように16進数で表記されることが一般的でしょう。
カラーコードとWebデザインでの活用
Webデザインにおいて最も身近な16進数の活用例がカラーコードです。
HTMLやCSSでは「#RRGGBB」という形式で色を指定し、RR(赤)・GG(緑)・BB(青)それぞれに00〜FFの16進数2桁(0〜255の10進数に相当)を割り当てます。
たとえば純粋な赤は「#FF0000」、白は「#FFFFFF」、黒は「#000000」と表記されるでしょう。
この仕組みにより、約1677万色(256×256×256)を表現できるのです。
16進数とプログラミングの関係
続いては、16進数とプログラミングの関係を確認していきます。
プログラミングにおいて16進数は非常に重要な役割を果たしており、さまざまな言語で16進数リテラルの表記がサポートされています。
各プログラミング言語での16進数表記
主なプログラミング言語における16進数の表記方法を確認しておきましょう。
各言語での16進数リテラル表記例
Python:0xFF(例:hex_value = 0xFF)
Java・C・C++:0xFF(例:int val = 0xFF;)
JavaScript:0xFF(例:let val = 0xFF;)
Python変換関数:hex(255) → ‘0xff’、int(‘ff’, 16) → 255
Java変換:Integer.toHexString(255) → “ff”
ほとんどのプログラミング言語では「0x」プレフィックスを使って16進数リテラルを表記できます。
言語ごとに16進数との相互変換のための組み込み関数も用意されており、実務でのデータ処理に活用されているでしょう。
ビット演算と16進数の関係
プログラミングにおけるビット演算(AND・OR・XOR・シフト演算)では、16進数が非常に使いやすい表記形式です。
たとえば「0xFF」はビットマスク(下位8ビットを抽出)として頻繁に使われ、「value & 0xFF」で下位1バイトの値を取り出すことができます。
ネットワークプログラミング・暗号処理・画像処理など、バイト単位でのデータ操作が多い分野では16進数の理解が必須といえるでしょう。
まとめ
本記事では、16進数の意味・仕組み・10進数との違い・読み方・用途・プログラミングとの関係まで幅広く解説してきました。
16進数は0〜9とA〜Fの16種類の記号を使う数体系であり、コンピューターの2進数データを人間が扱いやすい形式で表現するために広く活用されています。
メモリアドレス・文字コード・カラーコード・プログラミングなど、ITの世界では16進数の知識が随所で求められるでしょう。
16進数と2進数の相互変換がシンプルな規則に基づいている点も、コンピューター系の学習において大きな助けとなります。
ぜひ本記事を参考に、16進数の基礎をしっかりと身につけてください。