データの単位〜二進法、メガバイト・テラバイト

水はリットルで長さはメートルではかりますが、データのサイズはバイトではかります。1000リットルが1キロリットルで、1000メートルが1キロメートルのように、データも1000バイトで1キロバイト……、と言いたいところなのですが、実はちょっとだけ違います。とはいえ、もう誤差の範囲みたいなものなので、1000バイトで1キロバイトと言ってもいいくらいですが、ここではそのあたりのことと大きなデータの単位のお話しをしましょう。

パソコンには0と1しか使わない二進法が便利なわけ

私たちは、古来自分の指を使ってものを数えてきました。両手の指を1本ずつ使って数えていって、10本全部使い終わったら桁が上がって10になります。同じように、10の集まりを両手の指で数えて全部終わったら100です。これが十進法の数え方です。

でも身の回りのすべて十進法かというと、12個で1ダース、12ダースで1グロスといった十二進法というのもあります。そういえば12というのもキリのいい数字で、時計やカレンダーも12刻みですし、干支や星占いの星座も全部で12です。
ついでながら、12も指を使って、しかも片手だけで数えられるんだそうです。親指で、親指以外の指の、骨を1個ずつ数えていくと、4本の指に骨が3個ずつで、ちょうど12になるからです。

ともかく私たちの数の数え方は、私たちにとってそれなりに便利なやり方です。

でも、言うまでもなくパソコンは、10本の指を活用してものを数えたりはしません。つまりパソコンにとって十進法は、別に便利な数え方にはならない、ということです。
パソコンは指を活用するのでなく、電気的なスイッチを活用して数を数えます。言うなれば、電気が点いているか、消えているかの二択です。数字に置き換えると、電気が点いていたら1、消えていたら0の、ふたつだけの数字を使います。

そんなわけで、私たちが十進法を使っているのに対して、パソコンはパソコンにとって便利な二進法を使っています。とはいえ二進法のままだと私たちには不便なので、私たちに対してはそれを十進法にして示してくれている、という感じです。

二進法の、バイナリ

二進法のことを英語で「binary scale(バイナリスケール、直訳すると二進法のスケール)」といいます。「bi-」というのは、ラテン語源の接頭語で、2に関係する言葉に使われます。たとえばタイヤが2つある自転車は「bicycle(バイシクル)」、二ヶ国語を話す人のことは「bilingual(バイリンガル)」です。
それに対して十進法は「decimal system(デシマルシステム、直訳すると十進法のシステム)」です。スケールとシステムでなぜ違うのかわかりませんが、システムの方が複雑そうに聞こえるのが面白いです。

詳細ガイド:「二進法についてもうちょっと」へ

コンピュータの情報の単位、ビットとバイト

さて、この電気が「点いている=1」か「消えている=0」かというのが、パソコンの扱う情報の最小の単位です。このサイトの名前は、それにあやかって「0と1」です。
いきなり最小の単位だなんて、ちょっとわかりづらいかもしれませんが、平仮名の五十音の場合は「あ」や「い」が情報の最小の単位で、それが集まった「あいうえお」で「あ行」というひとまとまりで考える単位があるという程度のことです。

さてこの、電気が点いていたら1、消えていたら0とで表せるこのひとつひとつを「ビット」と呼びます。「binary digit(バイナリー・ディジット、二進法の数)」という言葉の、最初の二文字と最後の一文字を取って作った新しい単語ということですが、もともと英語には、ひとかけらやほんのちょこっとを表すbit(ビット)という単語もあったので、ちょうど語呂もよかったということのようです。そういえば日本にも、ブルボンの製品にbitという小さなチョコレートがありますね。

でも0だけ1だけでは、あまりにもほんの少しなので、ビットを8つ集めて1つの情報の単位を作りました。それがデータのサイズを表す時などに使う、「バイト」です。作ったのはIBMで、語源は「ひとかじり」を意味するbite(バイト)ですが、これではbitにスペルが似ていて間違いやすいということで、綴りをbyte(バイト)に変えて使うことにしたそうです。
これがよく聞く「バイト数」とか「メガバイト」などで聞く、あの「バイト」です。実際の最小の単位はビットだけど、実用性の面で普通はビットを八つ集めたバイトという単位を使います。

なぜあえて8個で一組? 別に何個でもよさそうなのに

なぜIBMがビット8個でワンセットのバイトにしたかというと、「BCDというフォーマットで数の保存が簡単だった」という実用性からだそうです。
8ビットで表せる数字は00000000から11111111までで、これは十進法に直すと0〜255で、つまり256種類のものが1バイトで表現できます。これは偶然、アルファベットなどの文字を表すのに十分で、人間の目が識別できる色の濃度の段階もだいたいそのくらいなので、白黒の写真の階調を表現するにも十分だという、なかなか都合のよい数だったそうです。

大きなデータの単位

長さをはかるのにメートル法を用いますが、いつも「メートル」を使うわけではありません。ビーズなど小さなものの直径はミリメートルで測り、家具のサイズだとメートルを使い、旅行など大きな移動はキロメートルで計算します。これは「メートル」を基準として、千分の一が「ミリ」、千倍が「キロ」というしくみです。同じように水を量る時も、「リットル」を基準として、「ミリリットル」「キロリットル」と千ごとに単位が変わります。

データの場合は「バイト」が基準です。残念ながらバイトは8等分までしかできないので(ビットが最小の単位ですからね)、千分の一で「ミリバイト」なんていうものは存在しませんが、千倍すると「キロバイト」になるのは同じです。ちょっとしたメモなどのテキストデータはバイトで表し、少しまとまった量のワード文書はキロバイトで示すという感じです。とはいえ、この「キロバイト」というのはぴったり1000倍とはちょっと違います。

なぜなら、パソコンにとっては1000は別にキリのいい数字ではないからです。というのも、1000を二進法で表すと、1111101000(十一億一千百十万とんで千)になってしまうからです。十一億一千百十万とんで千バイトで1キロバイト、というのはちょっとわかりづらくて煩雑ですね。
そこで二進法の10000000000(百億ぴったり!)で、単位が変わるようになっています。つまり二進法の10000000000バイトが1キロバイトです。じゃあこの、二進法で10000000000ぴったりというキリのいい数字を十進法で表すとどうなるかというと、1024になります。なので厳密には、1024バイトで1キロバイトなのです。

でも、1000というオーダーの数に対して24なんて、僅かなものです。たった2〜3%の違いなんて誤差の範囲とも考えられます。日常生活には無縁の知識ですし、そこまで詳しく知っているのは専門家くらいのものです。なので、そこはもう無視して1キロバイト=1000バイトと思っても、まったく問題ありません。なぜなら、そこの細かさよりも、バイトなのかキロバイトなのかという千倍もの差のほうが重要だからです。

ということで、その差を無視してもう1000倍とみなして、もっと大きな単位を見てみましょう。例として挙げてある「○○のサイズ」というのは目安ですので、全てその範囲だということではありません。

もちろんテラバイトの千倍はもうないのかというとそんなことはなくて、ペタバイト(PB)やそのまた千倍のエクサバイト(EB)なんていうのもあり、まだまだ続きます。ただ今の時代は、まだ一般家庭でこうした単位のデータを目にすることはありません。そういえば、私が写真のバックアップ用に使っている外付けハードディスクの容量が1TBですが、まだその1割程度しか使っていません。これを1000個以上必要とするようなデータを個人が扱うというのは、今のところ私にもピンとこないですね。
でも高速コンピュータの世界一になったこともある次世代スーパーコンピュータ「京(けい)」のシステム概要には、「数百ペタバイト超級まで拡張可能な高機能・超大規模ファイルシステム」と書かれています。ということは、ペタバイトといった単位も、新聞の記事などでは見ることがあるかもしれません。