ホーム第1章: 情報を数える・伝える
第1章 2節

数の表現:2進数と16進数

人間は両手の指が10本あることから、自然と「10進数」を標準としてきました。しかし、電球(トランジスタ)の明滅で情報を表すコンピュータにとっては「2進数」こそが自然な言語です。この節では、2つの世界を繋ぐ数の表現を学びます。

1. 10進数と2進数の本質

私たちが日常使う10進数(Decimal)は、0 から 9 までの10個の記号を使い、9 の次に値が増えると「桁上がり」が発生する仕組みです。

一方、コンピュータが使う2進数(Binary)は、01 の2つの記号しか使いません。そのため、1 の次に値が増えると、すぐに上の桁へ桁上がりします。

10進数: 125 1 2 5 10²の位 10¹の位 10⁰の位 2進数: 101 (10進数の 5) 1 0 1 2²の位 2¹の位 2⁰の位
図 1-2:10進数と2進数の桁ごとの「重み(位)」の対比

例えば、2進数の 101 は、次のような意味を持っています: 2進数の 101 = (1 × 2²) + (0 × 2¹) + (1 × 2⁰) = 4 + 0 + 1 = 5

2. なぜ2進数を使うのか?(物理的安定性)

「なぜ10進数で動くコンピュータを作らないのか」という疑問が湧くかもしれません。 技術的には、電流の強さを10段階(0V, 1V, 2V ... 9V)に分けて10進数回路を作ることも可能です。しかし、これは現実には極めて不安定になります。

電気ノイズによって電圧が「4.9V」に揺れたとき、それが 4 なのか 5 なのかを正確に判別するのは困難です。 一方、2進数のように「電圧がほぼゼロ(0)か、それとも高い(1)か」という2つの状態だけであれば、多少のノイズがあっても間違いなく判別できます。 この物理的なシンプルさと圧倒的な安定性こそが、コンピュータが2進数を採用する最大の理由です。

3. 人間のための「16進数 (Hexadecimal)」

2進数は機械にとって完璧ですが、人間には読みづらいという欠点があります。 例えば、10進数の 202 を2進数にすると 11001010。桁数が多く、一目では理解できません。

そこで登場するのが「16進数」です。16進数は、09 の数字のあとに A, B, C, D, E, F(10〜15を表す)を補った、16で桁上がりする数え方です。

美しき対応関係:4ビット = 16進数1桁

16進数を使う最大の理由は、「2進数の4桁(4ビット)が、16進数のちょうど1桁」に美しく収まるためです。

  • 2進数の最小の4桁 0000 = 16進数の 0
  • 2進数の最大の4桁 1111 = 16進数の F
2進数 (8ビット): 1 1 0 0 1 0 1 0 16進数表現: C A
図 1-3:2進数(8ビット)を4ビットずつ区切り、16進数(CA)に置き換える対応モデル

2進数の 11001010 は、4ビットずつに区切ると 11001010 になります。 これを16進数に翻訳すると、1100C (12)、1010A (10) となり、あわせて CA と短く簡潔に表記できます。

プログラミングで、16進数の値には先頭に 0x をつけて 0xCA のように書く習慣があります。これは、単なる「CA」という文字列ではなく、「16進数の数である」ことを表す約束事です。

4. 3つの表現の対応表

コンピュータサイエンスで頻出する「0から15まで」の対応表です。この関係性を頭に入れておくと、コンピュータの動きを推測する強力な武器になります。

10進数 2進数(4ビット) 16進数
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F
整理のポイント:n進数から10進数への変換(基数変換)

2進数や16進数などのn進数を10進数に変換するときは、「各桁の数字 × その桁の重み(基数のべき乗)」をすべて足し合わせます。

  • 2進数 1101 を10進数にする場合
    (1 × 2³) + (1 × 2²) + (0 × 2¹) + (1 × 2⁰) = 8 + 4 + 0 + 1 = 13
  • 16進数 A5 を10進数にする場合(Aは10を表す):
    (10 × 16¹) + (5 × 16⁰) = 160 + 5 = 165

桁の重みは、小数点から左(整数部分)に向かって n⁰, n¹, n², n³ ... と増えていき、右(小数部分)に向かって n⁻¹, n⁻², n⁻³ ... と減っていきます。この規則性を意識すると、あらゆる基数変換で迷うことがなくなります。