ワードあたり2のべき乗のビットは「便利」ですか?もしそうなら、なぜですか?


11

バイナリワードの2のべき乗のビット(バイトあたり8ビットなど)が「良いこと」または「便利だ」と主張するソースがいくつかあります。理由を指摘する情報源は見つかりません。

からバイトが8ビットである理由の歴史は何ですか?承認済みの回答を読みます。

バイナリコンピューターは、設計者が2の累乗のサイズを作成するように動機付けます。

いいけどなんで?同じ質問ですが、私が見つけた質問のコメントフィールドに:

最後の文は冗談ですか?12ビットのバイトは2のべき乗ではないため不便です。-robjb

繰り返しますが、理論的根拠はありません...

アドレスの計算は2のべき乗で非常に単純であり、小さな缶で生のトランジスタからロジックを作成する場合に重要です-マイク

バイトは最小のアドレス可能な単位なので、これはあまり意味がありません。しかし、コメントに対する賛成がたくさんあります。たぶん私は何かを見逃した。

ウィキペディアから:

8ビットの事実上の標準は、1バイトに値0〜255を許可する便利な2の累乗です。

そして、これは便利だろう...?

明確にするために、これはバイトあたりのビット数(例:8または6など)であり、バイトあたりの数(例:2 8または2 6など)ではありません。混乱のため、これはWordのサイズに関するものではないことも指摘します。

私は歴史的な理由に過度に興味はありません。それらは他の場所でよく説明されています(リンクを参照)。


SOに関する関連質問:https : //stackoverflow.com/questions/1606827/why-is-number-of-bits-always-a-power-of-two


2
@gnatここでは、バイトあたりのビット数(つまり、8ビットバイトの8)について話しているのではなく、バイトが表すことができる値の数(つまり、8ビットバイトの2 ^ 8)についてではないと確信しています。たとえば、6ビットのバイトがある場合、6 は2の累乗ではありませんが、はい、6ビットのバイトは2の累乗の値を表すことができます。
ビットツリー

2
@ 8bittree私はそれを得たと思う、説明してくれてありがとう!(重複投票の撤回-最後のコメントのような説明が質問に編集されると読者にとっては簡単になると思いますが、これはかなり微妙なようです)
-gnat

2
SOに関する同様の質問:stackoverflow.com/q/1606827/3723423-答えは、利便性について妥当な議論をもたらします
クリストフ

2
@Snowman:OPの投稿には、「質問を懇願する」誤acyが含まれています:「なぜ2のべき乗が便利なバイトサイズと見なされるのですか?」そうではありません。2の累乗とは関係ありません。彼はウィキペディアの記事の文章を読み違えました。
ロバートハーヴェイ

3
@RobertHarvey「バイトが8ビットである理由の歴史は?」(私の質問にもリンクされています)次の文があります:「バイナリコンピューターは、サイズを2のべき乗にする意欲をデザイナーに与えます。」これも読み間違えましたか?あなたの意見では、両方の情報源はどういう意味ですか?「あなたはそれを間違えた」と言うだけでは、本当に私のためにそれをしていません。
アンドレアス

回答:


10

8ビットのバイトの幅は2の累乗であるため、成功したとは思いません。ビットを個別にアドレス指定したくない場合、そしてそれが現在でも過去でも一般的な機能である場合、2のべき乗を持つことは実際的には重要ではありません一部のディスクリートコンポーネントは重要でした-ハードウェアエンジニアとソフトウェアエンジニアの反射と他の目的のために馴染みのある地位にとどまることは重要です)。小文字が必要でした。つまり、当時の支配的な6ビット文字セット以外のものを意味していました。ASCIIは7ビットでしたが、ASCIIは純粋に相互交換用でした(したがって、処理のために内部コードに変換されました)ため、

小委員会は、コンピューターメーカーが7ビットコードを内部で使用するコンピューターを設計する可能性は低いことを認識しています。4ビット、6ビット、および8ビットのコードを使用する可能性が高くなります。現在、コンピューター間、およびコンピューターと関連する入出力機器間で、128を超える別個の文字を交換する必要はありません。[自然なフレームサイズが8ビットであるが、パリティが必要であるため、フレームのペイロードが7ビットだった紙テープも、ASCIIの7ビット文字を支持して引用されます。 ](2)

ハードウェアの場合、データの75%が数値であり、BCD(3)で表されるときに一度に1バイトで2桁の10進数をパックできるため、8ビットバイトが勝ちました。

(1)たとえば、Blaauw and Brooks、Computer Architecture ; MacKenzie、Coded Character Sets、History and Developmentの両方がその主題について議論しています。

(3)X3.2の文書-ASCIIを担当する小委員会-MacKenzieが引用。

(3)再びマッケンジー。


1
ありがとうございました。あなたの答えはすぐにわかり、参考文献を持ってきました。あなたは私の票を持っています。あなたの言うことが真実なら、それを証明することも不可能だと私は思います。何かが存在しないことを証明することはできません。「利便性」を主張するものを実際に取り入れ、そのソースを確認する必要があると思います。たぶんそれはただ広まった噂です。
アンドレアス

もう1つの便利な要因は、1バイトを2つの16進数値として簡単に表現できることです。2バイトの2進化10進数(BCD)を1バイトに入れることは、一般にパック10進数と呼ばれます。これは、データが16進数で表示されるときに小数を10進数として読み取ることができるため、実際に便利であると考えられました。
ジミージェームズ

12ビットバイトは、3つの16進値として簡単に表すことができます。また、12ビットのバイトに3つのBCD番号を保存できます。確かに、2つの16進値と2つのBCD番号よりもはるかに優れています。実際、10ビットのバイトには3桁の10進数を含めることができます。そして、それがIEEE 10進浮動小数点標準の仕組みだと思います。
gnasher729

1
@ JimmyJames、16進数で因果関係が逆転すると思います。16進数は8ビットバイトを表すためのコンパクトな方法であったため、以前は8進数がはるかに普及していたために普及しました命令セットのエンコーディングで)。
AProgrammer

@ gnasher729、8ビットバイトは60年代の子です。6ビット文字から12ビット文字への移行は、60年代には考えられませんでした。UTF-16はあまりにも無駄であると見なされているため、制約がはるかに少ない今日でもUTF-8が一般的です。10ビットのバイトは考えられないほどであり、10進数の3桁ごとの10ビットのエンコードは、当時の技術による実装への影響について話すことなく、フロントパネルでレジスタとメモリの値を調べる場合も完全に非実用的です。
AProgrammer

2

歴史的な事故以外に、8/16/32/64ビットを使用する特別な理由はありません。私は12/24/48/96ビットが本当に便利だと思います。

テキストを処理する場合、仮想UTF-24を使用したUnicodeはUTF32よりも安価です。架空のUTF-12はすべてのシングルおよびダブルバイトUTF-8文字を12ビットに、トリプルおよびクアッドバイトUTF-8文字をすべて24ビットに格納します(範囲はわずかに2 ^ 20文字に縮小されますが、それでも4回ですrousしみなく使用されている以上); バリアントが2つしかないため、コードはより単純になります。

浮動小数点の場合、通常は48ビットで十分です。96ビットは、80ビット拡張よりも大幅に優れています。24ビットはグラフィックに役立ちます。一部のグラフィックカードでサポートされている16ビットよりもはるかに便利です。48ビットポインターは256テラバイトを処理できます。

唯一の欠点はビット配列で、バイト位置を計算するには12で割る必要があります。それが重要だと思われる場合は、ハードウェアで12による除算を非常に効率的に実装できると確信しています。


UTFについての興味深い点ですが、少しトピックから外れています。浮動小数点バイト(またはビット)サイズは、メモリと精度の無限の戦いです。ビット配列についても良い点です。
アンドレアス

1
興味深い考えですが、これが質問に答えるかどうかはわかりません。

1
問題は、「なぜ8ビットが便利だと考えられるのか」です。確かに「そうではない」と言うことは質問に答えます。
gnasher729

1
@ gnasher729質問は、「なぜバイトあたり2ビットのパワーが便利だと考えられるのか」でしたが、あなたの答えも同様に当てはまるようです。
ビットツリー

2
コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
ヤンニス

2

これは、8の倍数を使用する一般的なハードウェアアーキテクチャ、たとえば32ビットおよび64ビットアーキテクチャのため便利です。これは、8ビットのデータストレージおよび送信を使用する場合の効率が向上することを意味します。

「ただし、設計上の経済性を考慮すると、1つのサイズ、または倍数または分数(約数)によってプライマリサイズに関連付けられるごく少数のサイズが強く求められます。その優先サイズがアーキテクチャのワードサイズになります。」

Word(コンピューターアーキテクチャ)

参照:バイトが8ビットである理由の歴史は何ですか?


5
私はこれを答えとして受け入れません。私の質問は、事実上の標準が8ビットである理由ではなく、2のべき乗が便利な理由です。そして、8ビットの背後にある歴史は、本当の理由で5ビット、6ビット、7ビットが使用されていることを言及していますが、7ビットから8ビットに移行するのは「まあ、なぜ」と動機付けられています。現在のシステムとの互換性というよりも、2のべき乗が異なるソースを読んでいるような気がしました。(実際には8ビットは7ビット文字セットのパリティを与えました。)Wordは2のべき乗のサイズの利点を得る別の方法です。つまり、計算でマルチの代わりにシフトを使用できます。
アンドレアス

3
@RobertHarveyこの質問は、スイッチごとの状態の数(つまり、バイナリvs三値以上)ではなく、グループ化するスイッチの数に関するものです。質問の編集を参照してください。
ビットツリー

2
編集に関しては、1バイトあたりのビット数と1バイトあたりの値の数に意味のある区別はありません。同じことを表現する2つの方法です。バイトが保持できる値の数は、それに含まれるビットの数に直接続きます。バイトには8ビットがあるため、最大で値を保持できます2⁸-1
ロバートハーベイ

2
論理的には、便利な数値範囲を保持できるバイトのサイズを選択することになります。ASCIIは7ビットです。これは、ローマ字、数字、句読点、制御文字、およびいくつかの特殊文字の両方のケースをエンコードするのに十分な128の異なる値を提供するためです。1バイトは、テレタイプに適した合計8ビットのエラーチェック用に7 ASCIIビットと1パリティビットを保持できます。それ以来、1バイトにそのサイズを使用しています。
ロバートハーベイ

2
@JeremyKato私が言及したデバイスは古い(ほとんどの場合、60年代から80年代の時代です)ので、おそらくそれらに慣れていないのでしょう。ASCIIは、実際には7ビットのエンコードです(パリティは標準の一部ではありません)。しかし、あなたのコメントの大部分については、いや、私は何も見逃していません。8ビットが特に便利な理由があることを理解していますが、あなたとロバート・ハーベイが欠けているのは、8ビットではなく、一般に2ビットのべき乗についての質問であるということです。
ビットツリー

1

Wikipediaのwordの記事によると、これにより、メモリのアドレス指定に関連する計算が大幅に簡単になります。

異なる精度のデータ値を保存するために、異なる量のメモリが使用されます。一般的に使用されるサイズは、通常、アドレス解決の単位(バイトまたはワード)の2の倍数です。配列内のアイテムのインデックスをアイテムのアドレスに変換するには、乗算ではなくシフト操作のみが必要です。場合によっては、この関係により除算演算の使用を回避することもできます。その結果、最新のコンピューターデザインのほとんどは、バイトサイズの2倍のワードサイズ(および他のオペランドサイズ)を持っています。


2
はい、1バイトの2倍のサイズ。バイトが9、12、または15ではなく、8ビットでなければならない固有の理由はありません。
gnasher729

@ gnasher729、それは9または12または15で分割するよりも8(または16または32または64)によって除算する方がはるかに簡単
ロバート・ブリストウジョンソン

@ gnasher729ワードが2の累乗ビットで2バイトの累乗の場合、これはバイトが2の累乗ビットでなければならないことを意味します
vartec

@vartec記事と引用では、「一般的に使用されるサイズは通常、アドレス解決の単位(バイトまたはワード)の2の倍数です」および「最新のコンピューターデザインのワードサイズ(およびその他のオペランドサイズ)は累乗ですバイトの2倍のサイズです。」「ワードサイズ」はビットではなくバイトで測定されます。記事のビット単位のワードサイズに関する規則はありません。
アンドレアス

@vartec:IF。明らかに、32ビットワードと12ビットバイトでマシンを構築する人はいません。しかし、48ビットまたは96ビットのワードと12ビットのバイトを備えたマシンに対しては何も話しません。そして、ワードが10バイトであったマシンがありました。
gnasher729

0

アドレス空間と密接に関連しています。アドレスバスにもう1つ追加することで、2倍のメモリ位置をアドレス指定できます。そのため、その余分な行を追加するときは、最大限に拡張して使用することもできます。

これは、1、2、4、8、16、32などの自然な進行につながります。

生産技術レベルでは、同じリソグラフィパターンを繰り返すことも簡単です。つまり、それを倍にします。1つのラッチから始めてパターンを2倍にした場合、6、10、12ではなく8を渡します。


1
それはバイトのビット数とどのように関係していますか?32ビットの論理ANDは36または28ビットよりも簡単に実装できると真剣に主張していますか?
gnasher729

1
私はそのような主張をしませんでした。私の提案は、トランジスタが安価になり、ICがより小さな回路に対応できるようになったため、widrhで徐々に拡張された初期の設計に由来するものです。
マーティンマート

1
生産技術レベルに関する興味深い理論。あなたは何かをしているかもしれません。段落を拡張したり、基本を説明するリンクを提供したりできますか?
アンドレアス

1
それはナンセンスです。たとえば、さまざまな場所ですべての種類の奇数ビットサイズが必要なグラフィックスカードでは、すべてが1ビット以上ではなく、必要なサイズで正確に行われます。h.264デコーダーが一部の操作に19ビットの精度を必要とする場合、ハードウェアは20または24または32ではなく19ビットを実装します。ハードウェアを定義してから、レイアウトを作成するソフトウェアで実行します。
gnasher729

1
@MartinMaat:マーケティング+標準化と技術的理由を混同しています。そして、私たちが議論しているのはテクノロジーです。
gnasher729

0

ワード幅が常に2のべき乗であるとは限りません。私は最近、数値用に32ビットのワード幅を持つが、オペコード(48ビット幅)ではないSHArC DSPでいくつかのコーディングを行っています。

おそらく、ワード幅が2のべき乗である理由は、単一ビットをテスト(または設定、クリア、トグル)するか、指定されたビット数だけ左または右にシフト(または回転)する命令があるためです。オペコードにはビットフィールドがあり、単一ビットの位置またはシフトするビット数を指定します。ワード幅が2のべき乗の場合、このビットフィールドには、ワード全体をカバーするためにlog 2(word_width)ビットが必要です。つまり、32ビット幅のワードには、これらの操作のオペコードに5ビットのフィールドが必要です。ワードが33ビット幅の場合、6が必要です。それ以外の場合は、ワード全体をカバーできませんが、ワードが64ビット幅の場合も同様です。

オペコードのビットは非常に価値があるため、通常は無駄になりません。次に、単語を2のべき乗の幅にするのが理にかなっています。

バイトが8ビット幅である理由は、ASCII文字(7ビット)を保持できる最小の2の累乗であるためです。


これは私の専門分野ではありませんが、2バイトとワードサイズの累乗の正当な理由のように思えます。UBについてあまり心配する必要はないと思います。シフトの場合、33ビットには6ビットのオペコードが必要になりますが、有効な値を持つのは可能な値の約半分(0〜32)だけです。同意しますか?
アンドレアス

オペコードは、シフトカウントに必要なビットフィールドよりも広くする必要があります。バイトは8ビットの単語に他なりません。コンピューターハードウェアが8または16または32または64ビットのワードサイズを使用する傾向がある理由(常にそうではない、古いDSP56000に24ビットワードがあった)は、上記の理由とvartecによって与えられた理由のためです。 :パックされた単語のビットマップが与えられ、特定のピクセルの行番号と列番号が与えられると、ピクセルをテストまたは変更するためにアクセスする単語を知るために、列番号を単語幅で割る必要があります。2の累乗で割るのは簡単です。
ロバートブリストージョンソン

「パックされた単語のビットマップ」とは何ですか?HighColorはその説明に適していますか?
アンドレアス

@ robertbristow-johnson:想像力の欠如。9ビットバイトの場合、36ビットワード、RGBAの1600万色の代わりに1億3000万色、RGB555の代わりにRGB666、または低品質の色に怪物RGB565を使用します。ASCIIには、Latin Extendedまでの512文字が含まれます。
gnasher729

@Andreas、いいえ、私は2つの「色」を意味しました。完全に白または完全に黒。
ロバートブリストージョンソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.