初級では「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桁」の相性の良さが理由です。
ビットを束ねると何でも表せる
同じ0と1の並びでも、読み方のルールを変えると、数にも文字にも色にもなります。ルールごとに見ていきます。
数(整数)。8ビットで0〜255を表せますが、マイナスも扱いたい。そこで先頭ビットを符号に使い、負の数は 2の補数 という方式で表します。ざっくり言えば「桁を全部反転して1を足す」とマイナスになる仕組みで、これなら引き算を足し算の回路で処理できます。8ビットの符号つき整数なら、表せる範囲は -128〜127 になります。
文字。ここは2段階に分かれます。
- 文字集合(例:Unicode) — 「あ」は U+3042、「A」は U+0041、と文字に番号を割り当てる台帳
- 符号化方式(例:UTF-8) — その番号を実際のバイト列に変換するルール
アニメーション『ビット=スイッチのオン/オフ』を開く
UTF-8は、英数字は1バイト、日本語などは3バイト前後、と文字によってバイト数を変える可変長方式です。だから英語中心のデータは小さく、世界中の文字も表せます。「文字集合=どの文字に何番」「符号化方式=その番号をどうバイトにするか」と役割が分かれている点が要です。
色や音も同じで、画素の色を赤・緑・青の数値に、音の波の高さを数値の列にする。変換ルールが違うだけで、行き着く先はぜんぶ0と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 ≒ スマホ写真なら数十万枚
圧縮 — 同じ中身をより少ないビットで
データ量を減らす技術が 圧縮 です。大きく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バイトは何ビットか、半角数字で答えてください。