2進数・16進数完全ガイド:数値進数の原理・変換方法とプログラミング応用

コンピュータの世界は進数に満ちています。CSSの #1A2B3C、メモリアドレス 0x7FFFFFFF、Base64エンコード、URLの %20……これらの不思議な文字列は、すべて同じ概念——進数(Number Systems)——から来ています。理解すれば、より多くの技術の仕組みが読み解けるようになります。

1. 進数とは?

進数とは「数字を表すのに何種類の記号を使うか」というルールです。私たちが日常使う10進数(Base-10)は 0〜9 の 10 種類の記号を使い、9 の次で繰り上がって 10 になります。

  • 2進数(Base-2):0 と 1 だけ。1 の次で繰り上がり 10(「いちぜろ」と読み、10進数の 2 を表す)
  • 8進数(Base-8):0〜7 を使い、7 の次で繰り上がる
  • 16進数(Base-16):0〜9 に加え A〜F(A=10, B=11, …, F=15)を使い、F の次で繰り上がる
10進数2進数8進数16進数
0000000
81000108
10101012A
15111117F
16100002010
25511111111377FF

2. 2進数(Base-2)

2進数はコンピュータハードウェアの言語です。電気回路には「通電」と「遮断」の2状態しかなく、それがちょうど 1 と 0 に対応します。0 か 1 の 1 桁をビット(bit)、8ビットまとめたものをバイト(byte)と呼びます。

10進数 → 2進数の変換

方法:2 で繰り返し割り算し、余りを下から上に読む。

13 ÷ 2 = 6 余り 1  ↑
 6 ÷ 2 = 3 余り 0  ↑
 3 ÷ 2 = 1 余り 1  ↑
 1 ÷ 2 = 0 余り 1  ↑
結果:1101(10進数 13 = 2進数 1101)

2進数 → 10進数の変換

方法:各桁に 2 の累乗をかけて合計する。

1101 = 1×2³ + 1×2² + 0×2¹ + 1×2⁰
     = 8 + 4 + 0 + 1
     = 13
実際の応用:ファイルのchecksum(SHA-256など)は内部でビット演算を行い、出力される長い16進数文字列は2進数ハッシュ値の16進数表現です。Checksumツールでファイルのハッシュ値を生成して完整性を確認できます。

3. 16進数(Base-16)

16進数はプログラミングで最もよく使われる進数です。なぜなら、2進数と完璧な対応関係があるからです:4ビットがちょうど1桁の16進数に対応します。

2進数:1111 1010 1011 1100
16進数:   F    A    B    C  → FABC

これにより、16進数はメモリアドレス、カラーコード、ハッシュ値を表すのに理想的な形式となっています——2進数より短く、底層の2進数と直接対応している。

CSSカラーコードの例

#FF5733 は3対の16進数で、それぞれ R(赤)・G(緑)・B(青)を表します:

16進数10進数(0–255)
赤(R)FF255
緑(G)5787
青(B)3351

#FF5733rgb(255, 87, 51) と同等で、オレンジがかった赤色です。

4. URLエンコードにおける16進数

URLに使える文字は限られており、スペース・日本語・特殊記号などはパーセントエンコーディングで表現します。文字のUTF-8バイトを16進数に変換し、%を前に付けます。

元の文字URLエンコード説明
スペース%2016進数 20 = 10進数 32(スペースのASCIIコード)
/%2Fパス以外でスラッシュを使う場合
%E6%97%A5UTF-8で3バイト
今すぐ試す:日本語や特殊文字を含むURLをURLエンコードツールに貼り付けると、各文字の16進数エンコードをリアルタイムで確認できます。

5. Base64:よく使われるエンコード方式

Base64は進数ではなく、バイナリデータを印刷可能な文字列に変換するエンコード方式です。3バイト(24ビット)を4組の6ビットに分割し、各グループを64文字(A–Z、a–z、0–9、+、/)のいずれかに変換します。

元データ(ASCII):Man
2進数:01001101 01100001 01101110
6ビット分割:010011 010110 000101 101110
Base64:       T      W      F      u  → TWFu

Base64の出力はもとのデータより約33%大きくなりますが、メールのHTMLやJSON属性など、テキストのみのチャネルでバイナリを安全に送れます。

今すぐエンコード:任意のテキストやファイルをBase64エンコードツールに入力して、エンコード・デコード結果をリアルタイムで確認できます。

6. 各言語での進数表記

言語2進数8進数16進数
Python0b10100o120xA
JavaScript0b10100o120xA
C / C++—(ネイティブ構文なし)0120xA
Java0b10100120xA
CSS#FF5733

まとめ

進数は難解な理論ではなく、多くの日常的な技術を理解するための鍵です:

  • 2進数はコンピュータ底層の言語、ビット演算の基礎
  • 16進数はプログラミングの共通語。カラーコード・メモリアドレス・ハッシュ値はすべて16進数で表現される
  • Base64は2進数の上に構築され、テキスト環境でのバイナリ転送問題を解決する
  • URLエンコードは許可されない文字を16進数で標記し、URLに任意の文字を含められるようにする

これらの基礎を理解すれば、%E6%97%A5#FF5733TWFu といった文字列を見た瞬間に意味が読み解けるようになります。