回答編集履歴

1 説明が漏れていた部分の追記

himazin.blm

himazin.blm score 370

2018/09/07 01:28  投稿

この件を語る時に、最初に触れておくべき話として、そもそも何の bit 数をもって「××bitCPU」と言うのか、という話があります。
一般的には「その CPU が持つ最長のアドレスレジスタの bit 数」なのだと聞いたことがありますが、モノによって解釈が違う bit 数を自称していることがそれなりにあるので、実は明確な定義はないと言ってよい状況です。「レジスタ同士の演算器のうち最長の bit 数のものの bit 数」だとか、「命令長」とか、他の何かだったりします。
昔は、アドレスレジスタとデータレジスタの長さを別にすると無駄に演算器を作ることになるため、このあたりは統一されていることが多く、あまり困らなかったのですが、最近はそのコストよりも別のコストの方を重視するようになってきたため、さらにカオスになってきているのが実情です。
昔は、アドレスレジスタとデータレジスタの長さを別にすると、それぞれ用に演算器を分けて作る必要が出てくるため、このあたりは統一されていることが多く、定義が曖昧でもあまり困らなかったのですが、最近はそのコストよりも別のコストの方を重視するようになってきたため、カオスなことになってきているのが実情で、この縛り自体もだいぶ緩いものとなってきています。
以上を踏まえた上で本題ですが、まず、他の回答ですでに触れられている通り、8bitCPU の前に 4bitCPU がありましたので、この件は、「4 の倍数かつ、2 のべき乗」というのが正しい話になります。
ではなぜ 4 の倍数なのかと言えば、電卓を発祥とする関係もあり、10 進数表現が必要だったからです。BCD 表現 / 表記等と言います。なぜこれが必要かと言えば、小数点以下の数を扱う場合に、2 進数のままだといろいろ都合が悪いことによります。
ではなぜ 4 の倍数なのかと言えば、電卓を発祥とする関係もあり、10 進数表現が必要だったからです。計算結果を10進数表記で出力する際に、4bitで10進数の1桁分を表すBCD 表現 / 表記等に変換してから出力することで処理が楽になるわけですね。他にも、小数点以下の部分の数を扱う場合に、2 進数のまま計算していると10進数への変換時に結構な誤差が発生してしまって都合が悪い問題への対応としてもBCD表記が使われています。
そして、なぜ 2 のべき乗なのかと言えば、回路設計の都合です。CPU というのは大規模な回路であり、その設計にはパターン化による省力化が必須です。パターン化することで設計負荷を下げ、デバッグなどのコストを抑えることができます。
そのパターン化の中で、同じ回路を 2個並列に並べて上位 bit と下位 bit に分けて処理しておいて、後でうまいことつなぎ合わせるようなことができるパターンがあるため、単純に倍にした方が半端にbit数を伸ばした回路を作るより簡単だし、過去に頑張ってデバッグ&最適化してきた回路(パターン)をそのまま使い回すこともできてさらに効率がよくなるというわけです。
そんなわけで、倍に、倍に、となってきた結果、「4の倍数かつ2のべき乗」が主流となってきた、という話なのですが、64bitより上については、さまざまな事情からこの法則を外れる可能性が高いです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る