CreaTools LogoCreaTools
Number Base Converter

2進数・8進数・10進数・16進数の使い分け|なぜ16進が選ばれるのか

2026-02-28

結論:用途で決まる

基数よく使う場面
2進数ビット演算、フラグ、レジスタ
8進数UNIXパーミッション(chmod)
10進数通常の計算、UIに表示する値
16進数メモリアドレス、色コード、バイト列、ハッシュ値、Unicode

「コンピュータは2進で動く」とよく言いますが、人間が見やすい形に丸めるのが各基数の役割です。


2進数(binary)

何のためにある?

コンピュータの内部表現そのもの。CPUのレジスタ、メモリの各ビット、論理演算(AND/OR/XOR)はすべて2進。

10101010 = 170
&  11110000
─────────
   10100000 = 160

使う場面

  • ビットフラグ(READ | WRITE
  • マスク処理(x & 0xFF
  • ハードウェアレジスタ
  • 暗号アルゴリズムの可視化

弱点

桁数が多すぎて読みにくい。2^32 を書こうとすると33桁。人間用には適さないため、内部処理にとどまり、表示・記述には16進を使います。


8進数(octal)

何のためにある?

「2進3桁を1桁で表す」もの。2^3 = 8 なので、3ビットがちょうど1桁になります。

2進: 111 101 101
8進:  7   5   5

使う場面

  • UNIXパーミッションchmod 755
  • 古いコンピュータの命令セット表記(PDP-8、PDP-10)
  • C言語の文字定数('\077'

なぜUNIXパーミッションだけ生き残ったか

各3ビットが「読み・書き・実行」の3要素にぴったり対応するからです:

rwx rwx rwx
111 111 111 = 777(誰でも全権限)
111 101 101 = 755(所有者全権限、他は読み実行のみ)

8進1桁が「ユーザ・グループ・その他」の3カテゴリ各々の権限を表す、という設計。


10進数(decimal)

何のためにある?

人間が普段使う基数。10本の指から来ているとされ、文化的に定着しています。

使う場面

  • ユーザに表示する数値
  • 金額、年齢、件数
  • 一般的な計算

コンピュータ的には不便

1/3 = 0.333... のような循環小数や、0.1 + 0.2 = 0.30000000000000004 のような浮動小数点誤差は、10進と2進の表現の違いから生じます。お金の計算で Decimal 型を使うのは、2進ベースの float だと正確に扱えないため。


16進数(hexadecimal)

何のためにある?

「2進4桁を1桁で表す」もの。2^4 = 16。1バイト(8bit)= 16進2桁でぴったり収まるのが最大の利点。

2進: 11111111
16進:    FF

使う場面

  • メモリアドレス0x7fff5fbff8c0
  • バイト列の表示hexdump
  • 色コード#3b82f6
  • MACアドレスAA:BB:CC:DD:EE:FF
  • ハッシュ値(SHA-256: 64文字の16進)
  • UnicodeコードポイントU+1F600
  • C/JavaScript の数値リテラル0xCAFEBABE

なぜ16進が選ばれるのか

1バイト = 16進2桁 という対応が綺麗だから。3バイト = 6文字(色コード)、16バイト = 32文字(MD5)、32バイト = 64文字(SHA-256)。長さが安定して予測可能です。

8進だと1バイト = 2.67桁で中途半端。10進だと1バイト = 0〜255で桁数がバラバラ。16進は表示の長さが揃うので、ダンプや比較に向いています。


進数間の変換でよくあるシチュエーション

16進バイトを2進フラグとして読みたい

0xA5 = 10100101

進数変換ツール で16進数欄に A5 と入れれば、2進数欄で確認できます。

Linuxのchmod数値を理解したい

755 → rwxr-xr-x
644 → rw-r--r--
777 → rwxrwxrwx

8進数欄に入れると、2進数欄で各ビットが見えます。

Unicodeコードポイントを文字に対応させたい

0x1F600 = 128512 = 😀
0x3042 = 12354 = あ

16進・10進が同じ整数を指していることを確認できます。


進数変換が「すぐ理解できる」ようになるコツ

  1. 2進4桁 = 16進1桁 を暗記(1010 = A1111 = F
  2. 2進3桁 = 8進1桁 を覚える(111 = 7
  3. 16進2桁 = 1バイト を意識
  4. 残りはツールで変換

人間が暗算で変換できる範囲はせいぜい1〜2バイト。それ以上は道具に任せるのが効率的です。


関連記事


基数は「何のために使うか」で選ばれます。ビット操作なら2進、メモリ表記なら16進、権限管理なら8進、人間用なら10進。それだけ。