2進数とデータ — 0と1がすべての正体

概要 — まず全体をつかむ

初級では「0と1がすべての正体」であることを見ました。中級では、0と1をどう束ね、どんなルールで数・文字・データ量に変換するかを正確に見ます。データの種類やメディア・圧縮そのものは データの正体 が担当します。

詳細 — 1段階ずつ追う

なぜ0と1なのか

コンピュータが2進数を使うのは、電気回路が「流れている/いない」の2状態を最も確実に区別できるからでした。この0か1かの1桁が ビット(bit) で、最小単位です。

ビットが8個集まると 1バイト(byte)。1バイトで2の8乗=256通りを表せます。ここで問題になるのが「2進数は桁が長くて人には読みにくい」こと。たとえば 11010110 は8桁もあります。

そこで登場するのが 16進数 です。4ビット=16進数1桁にちょうど対応するので、1バイトは16進数2桁でスッキリ書けます。

  • 2進 1101 → 16進 D(10進では13)
  • 2進 0110 → 16進 6
  • よって 11010110 → 16進 D6

色コード #FF0000(赤)やメモリのアドレス表示に16進が使われるのは、この「4ビット=1桁」の相性の良さが理由です。

この部分をもっと深く(上級

「2値が確実だから」の裏には、ノイズマージンという考え方があります。信号は必ず揺れますが、判定のしきい値から遠い2点(低い=0・高い=1)だけを使えば、多少揺れても誤読しません。10段階の電圧なら隣との差が狭く、同じノイズで誤りが増えます。確実さと引き換えに1本あたりの情報を1ビットに絞る——これが2進の設計思想です。

1ビットは「不確かさを半分にする」情報量です。だからnビットで2のn乗通りを区別でき、束ねるほど表現力が指数的に増えます。

アニメーション『ビット=スイッチのオン/オフ』を開く
ビット = スイッチのオン / オフ1つのスイッチ = 1ビット(bit)ON = 1OFF = 0スイッチ8個 = 1バイト(byte)= 8ビット012816403201618040201各スイッチの重み(128〜1)。ONの重みを足すと数になる010010008ビットの並び(1バイト)数として読むと … 64 + 8 =72文字コードで読むと … 文字Hすべては0と1の並び。「読み方のルール」で意味が決まる
やさしく言うと(初級

コンピュータの中では、文字も写真も音楽も動画も、すべて0と1の並びで表されています。なぜわざわざ2種類だけなのでしょうか。

答えは「機械にとって一番間違えにくいから」です。コンピュータの中身は電気回路で、電気には「流れている/流れていない」というはっきりした2つの状態があります。もし10進数を使おうとすると電圧を10段階に見分ける必要があり、ノイズですぐ誤読します。オンかオフかの2択なら、まず間違えません。

半導体ウェハ
0と1の正体 — オン/オフを刻む半導体

この0か1かの1桁を ビット(bit) と呼びます。コンピュータの世界の最小単位です。

ビットを束ねると何でも表せる

同じ0と1の並びでも、読み方のルールを変えると、数にも文字にも色にもなります。ルールごとに見ていきます。

数(整数)。8ビットで0〜255を表せますが、マイナスも扱いたい。そこで先頭ビットを符号に使い、負の数は 2の補数 という方式で表します。ざっくり言えば「桁を全部反転して1を足す」とマイナスになる仕組みで、これなら引き算を足し算の回路で処理できます。8ビットの符号つき整数なら、表せる範囲は -128〜127 になります。

文字。ここは2段階に分かれます。

  • 文字集合(例:Unicode) — 「あ」は U+3042、「A」は U+0041、と文字に番号を割り当てる台帳
  • 符号化方式(例:UTF-8) — その番号を実際のバイト列に変換するルール
アニメーション『ビット=スイッチのオン/オフ』を開く
ビット = スイッチのオン / オフ1つのスイッチ = 1ビット(bit)ON = 1OFF = 0スイッチ8個 = 1バイト(byte)= 8ビット012816403201618040201各スイッチの重み(128〜1)。ONの重みを足すと数になる010010008ビットの並び(1バイト)数として読むと … 64 + 8 =72文字コードで読むと … 文字Hすべては0と1の並び。「読み方のルール」で意味が決まる

UTF-8は、英数字は1バイト、日本語などは3バイト前後、と文字によってバイト数を変える可変長方式です。だから英語中心のデータは小さく、世界中の文字も表せます。「文字集合=どの文字に何番」「符号化方式=その番号をどうバイトにするか」と役割が分かれている点が要です。

色や音も同じで、画素の色を赤・緑・青の数値に、音の波の高さを数値の列にする。変換ルールが違うだけで、行き着く先はぜんぶ0と1です。

この部分をもっと深く(上級

同じビット列でも、解釈の規則を変えると別の数になります。

2の補数(負の整数)。負数は「全ビット反転して1を足す」で作ります。こうすると引き算を足し算の回路で処理でき、符号ごとの特別扱いが要りません。8ビットなら -128〜127、桁あふれ(※1 オーバーフロー)は最上位からあふれたぶんを捨てる「ラップアラウンド」が既定です。127に1を足すと-128に回り込むのはこのためです。

浮動小数点(IEEE 754)。実数は符号・指数・仮数(※2 仮数)の3部で近似します。単精度なら符号1ビット・指数8ビット・仮数23ビット。値は「符号 × 1.仮数 × 2の指数乗」の形で、先頭の1は省く(ケチ表現)ぶん1ビット得します。ここで宿命なのが丸め誤差です。0.1は2進では循環小数(0.0001100110011…)になり、有限桁では正確に表せません。だから0.1+0.2がぴたり0.3にならないことがあります。

登場人物メモ:

  • ※1 オーバーフロー — 表せる桁を超えてあふれること。ラップ(回り込み)と飽和(上限で止める)の扱いがある
  • ※2 仮数 — 有効数字にあたる部分。ここの桁数が「どこまで細かく表せるか」を決める

金額のように誤差が許されない計算は、浮動小数点を避けて整数(最小単位=円や銭)10進型で扱うのが定石です。

アニメーション『0と1の解釈(数・文字・色)』を開く
01001000 01100101 01101100同じ 0 と 1 の並び(3バイト)① 数(整数)として各バイトを10進で読む72 · 101 · 108位取りで数値に② 文字(Unicode)として番号を文字に対応させるH e lU+0048 = 「H」③ 色(RGB)として3バイトを R・G・B にR72 G101B1081色ぶんの色データ決まった形式(ルール)で読んで初めて、0と1は意味を持つ
やさしく言うと(初級

1ビットでは「はい/いいえ」しか表せませんが、束ねると表現力が爆発します。

  • 2ビット → 4通り(00, 01, 10, 11)
  • 3ビット → 8通り
  • 8ビット → 256通り … これを 1バイト(byte) と呼びます

たとえば半角の「A」には65番、「B」には66番…と番号を割り当てるルール(文字コード)を決めておけば、文字は数値になり、数値は2進数になり、電気信号として扱えます。

アニメーション『ビット=スイッチのオン/オフ』を開く
ビット = スイッチのオン / オフ1つのスイッチ = 1ビット(bit)ON = 1OFF = 0スイッチ8個 = 1バイト(byte)= 8ビット012816403201618040201各スイッチの重み(128〜1)。ONの重みを足すと数になる010010008ビットの並び(1バイト)数として読むと … 64 + 8 =72文字コードで読むと … 文字Hすべては0と1の並び。「読み方のルール」で意味が決まる

写真も同じです。画像を細かいマス目(画素)に分け、各マスの色を「赤・緑・青の強さ」の数値で記録する。音楽なら、音の波の高さを1秒間に何万回も測って数値の列にする。変換ルールこそ違え、行き着く先はぜんぶ0と1。だから1本のケーブルで文字も動画も送れるのです。

単位の感覚をつかむ

データ量の単位は、10進の1,000区切りと、2進の1,024区切りの2種類があります。

  • 厳密には 1 KiB(キビバイト)= 2の10乗 = 1,024 バイト、1 MiB = 1,024 KiB、1 GiB = 1,024 MiB
  • 一方 1 KB = 1,000 バイト とする10進表記も広く使われる

「1,000か1,024か」で微妙にズレるのはこのためです。ストレージの容量表示(10進)とOSの表示(2進)が食い違って見えるのも、この単位の違いが原因です。

  • 1 KB ≒ 短いメール1通ぶん
  • 1 MB ≒ 写真1枚、曲1分ぶん
  • 1 GB ≒ 映画1本(標準画質)
  • 1 TB ≒ スマホ写真なら数十万枚
やさしく言うと(初級
  • 1 KB(キロバイト)≒ 1,000 バイト … 短いメール1通ぶん
  • 1 MB(メガバイト)≒ 1,000 KB … 写真1枚、曲1分ぶん
  • 1 GB(ギガバイト)≒ 1,000 MB … 映画1本(標準画質)
  • 1 TB(テラバイト)≒ 1,000 GB … スマホ写真なら数十万枚

「ギガが減る」の「ギガ」はこの単位のことで、正確には通信で送ったデータ量を指しています。0と1を何個送ったか、という話だったわけです。

圧縮 — 同じ中身をより少ないビットで

データ量を減らす技術が 圧縮 です。大きく2種類あります。

  • 可逆圧縮(ロスレス) — 元に完全復元できる。ZIP、PNG、FLACなど。文書やプログラムのように1ビットも変えられないデータ向き
  • 非可逆圧縮(ロッシー) — 人が気づきにくい情報を捨てて大幅に小さくする。JPEG、MP3、H.264(動画)など。写真・音・動画向き

非可逆は「元に戻せない」代わりに圧縮率が高い。用途に応じて、正確さを優先するか小ささを優先するかで使い分けます。同じ0と1でも、どう詰めるかで容量が変わるわけです。

関連する知識

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. 2進数4桁(4ビット)は16進数の何桁にちょうど対応する?

2. 文字集合(Unicode)と符号化方式(UTF-8)の関係として正しいのは?

3. 8ビットの符号つき整数(2の補数)で表せる範囲はどれ?

4. UTF-8が「可変長」と呼ばれる理由として正しいのは?

5. ストレージの容量表示と、OS上で見える容量が微妙に食い違うことがある主な理由は?

6. 次のうち、元に完全復元できる可逆圧縮の例はどれ?

7. 0か1のどちらかを表す、情報の最小単位を何と呼ぶ?

8. 1バイトは何ビットか、半角数字で答えてください。