コンピュータはどうやって0と1ですべてを表すのか

読了 6分

コンピュータは0と1しか扱わない、という話を一度は耳にしたことがあると思います。ところが、いざ考えてみると不思議です。私たちはコンピュータで文章を書き、写真を見て、音楽を聴き、動画を見ます。これらすべてが本当に0と1という2つの数字で表されているというのは、なかなか実感がわきません。

この記事では、コンピュータが文字、数字、色、音といったまったく異なる情報を、すべて0と1に変換して扱う仕組みを直感的に説明します。数学はほとんど使いません。核心さえつかめば、思ったよりも単純な話です。

なぜほかでもなく0と1なのか #

コンピュータの中では電気が流れています。そして、もっとも扱いやすい信号は「電気が流れている」と「電気が流れていない」という2つの状態です。

電球のスイッチを思い浮かべてください。オンとオフ、たった2つだけです。あいまいに半分だけ点いた状態を区別しようとすると、どこまでが半分なのか判断が難しく、誤りも生じます。一方、オンとオフだけを区別するなら、迷うことはほとんどありません。

コンピュータの部品であるトランジスタが、まさにこの役割を果たします。電気を流したり止めたりする、とても小さなスイッチです。このオンとオフを数字で書いたものが1と0です。ですから、コンピュータが0と1を使っているというより、オンとオフというもっとも安定した2つの状態を、ただ0と1と呼んでいるだけなのです。

ビットとバイト #

この0または1の1つをビット(bit)と呼びます。コンピュータが扱う情報のもっとも小さな単位です。

ビット1つは0または1、2通りだけを表します。ところが、ビットを複数まとめると、表せる場合の数が増えます。ビット2つをまとめると、00、01、10、11の4通りです。ビット3つなら8通りです。1つ増えるたびに2倍ずつ増えていきます。

このようにビットがn個あれば、2のn乗ぶんの場合を表せます。ビット8つをまとめると2の8乗、つまり256通りです。この8ビットのまとまりを1バイト(byte)と呼びます。ファイルサイズの話に出てくる、あのバイトのことで間違いありません。

整理すると、こうなります。1ビットは0または1で、8ビットが集まると1バイトになり、1バイトでは256通りを区別できます。この256通りという数字は後でまた登場するので、覚えておくとよいです。

数字: 二進法 #

私たちが普段使う数字は、0から9までの10個の記号を使います。10になると1つ桁を上げます。これを十進法といいます。

コンピュータは0と1の2つだけを使うので、2になると1つ桁を上げます。これが二進法です。原理はまったく同じで、使う記号の個数だけが違います。

簡単な例を見てみましょう。二進数1011を見てみます。右から1、2、4、8という大きさを持ち、1が点いている桁の大きさだけを足します。1011は右から1(オン)、2(オフ)、4(オン)、8(オン)なので、2は飛ばして1と4と8を足し、1足す4足す8、つまり11です。複雑に見えますが、結局のところ点いている桁の値を足すだけのことです。

深く暗記する必要はありません。「コンピュータは数字を0と1の組み合わせで書く」という程度を理解すれば十分です。

文字: 約束で表す #

ここで1つの疑問が生まれます。数字はそうだとして、文字はどうやって0と1になるのでしょうか。

答えは約束です。人々が「この数字はこの文字を意味する」とあらかじめ決めておくのです。この約束をエンコーディングと呼びます。

もっとも古い約束の1つがASCIIです。ASCIIでは大文字の’A’を65番と決めています。‘B’は66、‘C’は67です。ですからコンピュータが’A’を保存するときは、実際には65という数字を保存し、その65はさらに二進数に変換されて0と1として記録されます。

英語のアルファベットと記号くらいなら256通りの中にすべて収まるので、1バイトで十分でした。ところが、ハングル、漢字、絵文字のように文字がはるかに多い場合は、256通りでは足りません。そこで世界中のほぼすべての文字に番号を振ったUnicodeという、より大きな約束が生まれ、これを効率的に保存する方式がUTF-8です。私たちが目にするハングルや絵文字は、ほとんどがこの方式で扱われています。

結局のところ、文字も約束に従った数字であり、数字はまた0と1です。

色と音 #

ここまでくれば、画像や音楽も見当がつきます。同じように数字に変換すればよいのです。

まず色です。画面はピクセルというとても小さな点で構成されています。点1つの色は、赤、緑、青という3つの光の強さで表します。頭文字をとってRGBと呼びます。それぞれの強さを0から255までの数字で書きます。赤255、緑0、青0なら純粋な赤色で、3つとも255なら白色です。

ここでもさきほどの256通りが出てきます。0から255までがちょうど256通りで、だから色1つの強さは1バイトで記録されます。写真1枚はこうしたピクセルが数百万個集まったものなので、結局のところ巨大な数字の並びです。

音も似ています。音はもともと途切れることなく続く波形です。コンピュータはこの波形をごく短い間隔で細かく区切り、各瞬間の高さを数字で記録します。これをサンプリングといいます。1秒間に数万回ずつ測定するため、再び続けて聴くと、人の耳には途切れのない音楽として聞こえます。音楽ファイルもまた数字の並びというわけです。

まとめ #

ここまで見てきたことを一言に縮めると、こうなります。コンピュータにとって世界のすべての情報は、結局のところ0と1の長い並びです。

文字も、数字も、写真の色も、音楽の波形も、すべて数字に変換し、その数字をまた0と1で書きます。そして「この数字は文字Aだ」「この数字は赤の強さだ」といった約束、つまりエンコーディングが、その0と1を再び文字や画像や音に戻してくれます。コンピュータが魔法のように見えることは、実はこの単純な約束が幾重にも積み重なった結果なのです。

そして、この0と1をどう扱うかをコンピュータに指示することこそが、まさにプログラミングです。コンピュータが情報を扱う仕組みが気になっていたなら、その情報を直接扱う方法であるプログラミングにも興味がわいてくるはずです。続けてなぜすべての人がプログラミングを学ぶべきなのかもあわせて読んでみることをおすすめします。

X