バイナリワードの2のべき乗ビット(バイトあたり8ビットなど)は「良いこと」または「便利なこと」だと主張する情報源をいくつか見つけました。理由を指摘する情報源は見つかりません。
から バイトが8ビットである理由の履歴は何ですか? 承認された回答を読み取ります。
バイナリコンピュータは、サイズの2の累乗を作成するように設計者を動機付けます。
いいけどなんで?同じ質問の中ですが、質問のコメントフィールドにあります。
最後の文は冗談ですか? 12ビットのバイトは2の累乗ではないので不便です。-robjb
繰り返しますが、根拠はありません...
アドレスの計算は、2の累乗を使用することで、はるかに簡単になり、小さな缶で未加工のトランジスタからロジックを作成するときに重要になります-Mike
バイトはアドレス可能な最小単位なので、これはあまり意味がありません。コメントへの賛成票がたくさん。多分私は何かを逃した。
Wikipedia から:
8ビットのデファクトスタンダードは、2のべき乗であり、1バイトに0〜255の値を許可します。
そして、これは...
明確にするために、これはバイトあたりのビットの数(たとえば、8または6など)、ではないバイトあたりの値の数(例:28 または26、など)。混乱のため、これはWordのサイズではないことも指摘します。
私は歴史的な理由に過度に興味を持っていません。それらは他の場所でよく説明されています(リンクを参照)。
SOの関連質問: https://stackoverflow.com/questions/1606827/why-is-number-of-bits-always-a-power-of-two
8ビットのバイトは2の累乗の幅を持っているため、成功したとは思いません。ビットを個別にアドレス指定したくない場合、そしてそれが現在でも過去でも一般的な機能である場合、2の累乗を持つことは実際には重要ではありません(スペアリングするときは、過去よりはるかに重要です)。一部のディスクリートコンポーネントは重要でした-ハードウェアおよびソフトウェアエンジニアにとって反射神経であり、慣れ親しんだ地面にとどまることは他の目的にとって重要です)、そして計算値の履歴で言及したことを覚えていません(1)。 1つは小文字が必要でしたが、それは当時の主要な6ビット文字セット以上のものを意味していました。 ASCIIは7ビットでしたが、ASCIIは、純粋に内部交換のため(したがって、処理のために内部コードに変換されるため)でした)、およびしたがって
Subcommmiteeは、コンピューターの製造元が内部で7ビットコードを使用するコンピューターを設計する可能性が低いことを認識しています。 4ビット、6ビット、8ビットのコードを使用する可能性が高くなります。現在のところ、コンピュータ間、およびコンピュータと関連する入出力装置との間で、128を超える個別の文字を交換する必要はありません。 [8ビットの自然なフレームサイズを持っているがパリティが必要な紙テープ。フレームのペイロードが7ビットだったため、ASCIIの7ビット文字が優先され、2の累乗は8ビットの利点の中で言及されていません。 ](2)
また、ハードウェアでは、データの75%が数値でBCD(3)で表されるときに一度に1バイトに2桁の10進数をパックできるため、8ビットバイトが勝ちました。
(1)たとえば、BlaauwとBrooks コンピュータアーキテクチャ; MacKenzie、コード化文字セット、履歴、および開発は、その主題について両方の議論があります。
(3)X3.2の文書-ASCIIの責任を負う小委員会-MacKenzieが引用。
(3)もう一度、マッケンジー。
歴史的な事故以外に、8/16/16/32ビットを使うべき理由は特にありません。 12/24/48/96ビットの方が本当に便利だと思います。
テキストを処理する場合、架空のUTF-24を使用するUnicodeはUTF32よりも安価です。架空のUTF-12は、すべてのシングルバイトおよびダブルバイトのUTF-8文字を12ビットで保存し、すべてのトリプルバイトおよびクワッドバイトのUTF-8文字を24ビットで保存します(範囲は2 ^ 20文字にわずかに減りますが、それでも4倍です)十分に使用されている以上のもの);バリアントは2つしかないため、コードはより単純になります。
浮動小数点の場合、通常は48ビットで十分です。 96ビットは、拡張された80ビットよりも実質的に優れています。 24ビットはグラフィックスに役立ちます。一部のグラフィックカードでサポートされている16ビットよりもはるかに便利です。 48ビットポインターは256テラバイトを処理できます。
唯一の欠点はビット配列であり、バイト位置を計算するには12による除算が必要です。それが重要だと思われる場合は、12による除算をハードウェアで非常に効率的に実装できると思います。
これは、8の倍数を使用する一般的なハードウェアアーキテクチャにより便利です。 32ビットおよび64ビットアーキテクチャ。これは、8ビットのデータストレージと送信を使用する場合の効率が高いことを意味します。
「しかし、デザインの経済性を考慮すると、1つのサイズ、または倍数または分数(約数)によってプライマリサイズに関連付けられたごく少数のサイズを強く押してください。その優先サイズがアーキテクチャのWordサイズになります。」
Wikipediaの記事 Word によると、これによりメモリのアドレス指定に関連する計算が大幅に容易になります。
異なる精度でデータ値を格納するために、異なる量のメモリが使用されます。通常使用されるサイズは、通常、アドレス解決の単位(バイトまたはワード)の2の倍数です。配列内の項目のインデックスをその項目のアドレスに変換するには、乗算ではなくシフト演算のみが必要です。場合によっては、この関係により除算演算の使用を回避することもできます。その結果、最新のコンピューター設計のほとんどは、バイトサイズの2の累乗であるワードサイズ(および他のオペランドサイズ)を持っています。
アドレス空間と密接に関連しています。アドレスバスにさらに1ビット追加することで、2倍のメモリロケーションをアドレス指定できます。したがって、その余分な行を追加するときは、完全に拡張するために使用することもできます。
これは、1、2、4、8、16、32などの自然な進行につながります。
生産技術レベルでは、同じリソグラフパターンを繰り返すのも簡単です。つまり、2倍にすることです。 1つのラッチから始めてパターンを2倍にすると、6、10、12ではなく、8が渡されます。
ワード幅は常に2の累乗であるとは限りません。私は最近numbersに対して32ビットのワード幅を持つSHArC DSPでいくつかのコーディングを行っていますが、オペコード(48ビット幅)には対応していません。
おそらく、ワード幅が2の累乗である理由は、単一ビットをテスト(または設定またはクリアまたはトグル)するか、指定されたビット数だけ左または右にシフト(または回転)するいくつかの命令によるものです。オペコードには、シフトする単一ビットの位置またはビット数を指定するビットフィールドがあります。ワード幅が2の累乗の場合、このビットフィールドにはログが必要です2(Word_width)ビットでWord全体をカバーします。つまり、32ビット幅のワードでは、これらの操作のためにオペコードに5ビットのフィールドが必要です。ワードが33ビット幅の場合、6ビットが必要です。そうでなければ、ワード全体をカバーできませんが、ワードが64ビット幅の場合も同様です。
オペコードのビットは非常に価値があるので、通常それらを無駄にしたくありません。次に、Wordを2のべき乗にすると意味があります。
バイトが8ビット幅である理由は、ASCII文字(7ビット))を保持できる最小の2の累乗であることです。