どうしてPCでは「8ビット=1バイト」として扱うのでしょうか? 例えば,ビットだけですべてを表せれば,0〜15の値を保存するさいに1バイト使うことがなくなると思うのですが。
現在のコンピュータでも,半端なビット数……,例えば5ビットとか3ビットというようなデータを扱うことは可能です。10ビット,4ビット,3ビットなど長さが違うデータを混在して扱うことも(やろうと思えば)できます。必要なビット数だけを使えば,確かにメモリの利用効率は上げられるでしょう。しかし,そうしない理由があります。その形式では,あまりに効率が悪くなってしまうのです。
メモリ自体は1ビットを1個の素子に記憶しますが,1ビット単位でCPUとデータを交換しているわけではありません。現在のコンピュータはクロック同期式ですから,1ビット単位でデータを交換すると1ビット/1クロックの時間が必要になり,効率が悪くなります。そこで現在では,例えばPentiumタなら一度に64ビットのデータを読み込むようになっています。
また,CPUはメモリからCPU内部にあるレジスタ(一種の記憶装置)にデータを移して演算を行い,その結果をメモリに書き戻すという動作が基本になります。このとき,レジスタに入るビットの長さを無制限にするわけにはいきません。1ビットレジスタは可能ですが,これでは演算の効率が悪すぎます(1ビットの演算に最低でも1クロック必要になってしまうため)。
したがって,レジスタにも適当な長さが必要になり,Pentium II など現在の多くのCPUのレジスタは32ビットの大きさを持っています。
一度にメモリやレジスタに読み書きできる単位が決まっているわけですから,データを半端なビット長で扱うには,処理を行うたびに不要なビットを切り取ったり重ね合わせる,いわゆるマスク処理が必要になることが理解できると思います。マスク処理にも(当然)クロックサイクルは必要です。処理速度が落ちるくらいなら,メモリの利用効率が多少悪くても素直に扱える単位でデータを扱ったほうがいい,というわけです。
以上で,コンピュータでは扱うデータの「区切り」が
必要になることが理解できると思いますが,その最低の区切り(単位)は8ビットです。では,なぜ32ビットや64ビットではなく,また5ビットや12ビットでなく,8ビットに決まったのでしょうか。
まず,32ビットや64ビットなど大きな単位にするとメモリの利用効率が低下してしまいます。効率よくメモリを使うには,ある程度の小さなビット数を単位にする必要があります。その昔は,12ビットなど今から見ると半端なビット数のコンピュータが存在していたようですが,やがて8ビットが標準的に用いられるようになりました。その理由は,我々が利用する10進数と相性がよく,扱いやすかったためです。
まず,4ビットは0〜15の値が表現でき,3ビット(=0〜7),5ビット(=0〜31)に比べ10進数に近い桁になるという特性があります。4ビットを一つの区切りとして扱うと,2進化10進という数の表現方法が利用でき(2進化10進というのは4ビットを0〜9に制限する数値の表現方法です),8ビットあれば2進化10進で2桁の10進数(0〜99)を表すことができます。という具合に,8ビットにはなにかと扱いやすい特徴があるため利用されています。
(米田 聡)