21

RAMとHDDのアーキテクチャ、または電子機器がメモリのチャンクをどのように処理するかについてはよくわかりませんが、これは常に私の好奇心を引き起こしました。コンピュータ値の最小要素として8ビットで停止することを選択したのはなぜですか。

答えは明らかなので、私の質問は非常に馬鹿げているように見えるかもしれませんが、私にはよくわかりません...

2 ^ 3を使用すると、メモリをアドレス指定するときに完全に収まるためですか?電子機器は特に8ビットのチャンクを格納するように設計されていますか?はいの場合、より広い単語を使用してみませんか?これは、32、64、および128を分割するため、プロセッサワードにそれらのワードのいくつかを与えることができるからです。このような小さなスペースに256の値があると便利ですか?

どう思いますか ?

私の質問は少し形而上学的すぎますが、それが単なる歴史的な理由であり、技術的または数学的な理由ではないことを確認したいと思います。

逸話として、私はASCII標準についても考えていました。ASCII標準では、最初の文字のほとんどがUTF-8のようなものでは役に立たないので、もっと小さくて高速な文字エンコードについても考えようとしています...

4

10 に答える 10

12

歴史的に、バイトのサイズは常に8ビットであるとは限りませんでした(さらに言えば、コンピューターもバイナリである必要はありませんが、非バイナリコンピューティングでは実際にははるかに少ないアクションしか見られませんでした)。IETFおよびISO規格でオクテットという用語がよく使用されるのはこのためです。バイトを使用しないのに8ビットを意味するとは考えたくないため、バイトを使用しません。

実際、バイトが造られたとき、それは1-6ビット単位として定義されました。履歴全体で使用されているバイトサイズには、7、9、36、および可変サイズのバイトを持つマシンが含まれます。

8は商業的な成功の混合物であり、それについて考える人々にとって十分に便利な数であり(お互いに影響し合っていたでしょう)、私が完全に知らない他の理由は間違いありません。

あなたが言及するASCII標準は7ビットバイトを想定しており、以前の6ビット通信標準に基づいていました。


編集:これに追加する価値があるかもしれません。バイトは常にオクテットであると言っている人は、バイトと単語を混同していると主張しているからです。

オクテットは、8ビットの単位に付けられた名前です(ラテン語から8ビット)。バイトが8ビットのコンピューター(またはより高い抽象化レベルのプログラミング言語)を使用している場合、これは簡単に実行できます。それ以外の場合は、変換コード(またはハードウェアのカバー)が必要です。オクテットの概念は、ローカルコンピューティングよりもネットワーク標準で登場します。これは、アーキテクチャに依存しないため、異なるバイトサイズのマシン間の通信に使用できる標準を作成できるため、IETFおよびISO標準で使用されるためです(ちなみに、ISO / IEC 10646は、Unicode標準がバイトを使用するオクテットを使用していますUnicode標準では、マシンごとにバイトのサイズが異なる場合でも、バイトごとにオクテット意味することが詳細に示されていますが、基本的には、後の部分に若干の追加の制限がありますが、同じ標準です。オクテットの概念は、8ビットバイトが一般的である(したがって、そのような標準の基礎としてそれらを使用することを選択する)が、普遍的ではない(したがって、あいまいさを避けるために別の単語が必要である)ために存在します。

歴史的に、バイトは文字を格納するために使用されるサイズでした。これは、おそらく1870年のBaudotから始まって、テレックスやその他の通信方法に使用されるコンピューターよりも前の慣行、標準、および事実上の標準に基づいています(私は以前は知りませんでしたが、修正の余地があります)。

これは、CおよびC ++では、バイトを格納するための単位が呼び出されchar、そのビット単位のサイズがCHAR_BIT標準のlimits.hヘッダーで定義されているという事実に反映されています。異なるマシンは、文字を定義するために5、6、7、8、9またはそれ以上のビットを使用します。もちろん、最近では文字を21ビットとして定義し、さまざまなエンコーディングを使用して8、16、または32ビット単位で格納しています(他のサイズのUTF-7などの非Unicode認定の方法)が、歴史的にはそれがそれがそうであったように。

マシンアーキテクチャを反映するのではなく、マシン間でより一貫性を保つことを目的とするbyte言語では、言語で固定される傾向があり、最近では、これは一般に、言語で8ビットとして定義されることを意味します。それらが作成されたときの歴史のポイントと、ほとんどのマシンが現在8ビットバイトを持っていることを考えると、その区別はほとんど意味がありませんが、異なるサイズのマシンにそのような言語のコンパイラやランタイムなどを実装することは不可能ではありませんバイト、それほど簡単ではありません。

単語は、特定のコンピューターの「自然な」サイズです。これは、一般的に一致するがそうではない可能性があるいくつかの重複する懸念に影響を与えるため、あまり明確に定義されていません。マシン上のほとんどのレジスタはこのサイズになりますが、そうでないものもあります。最大のアドレスサイズは通常ワードですが、そうではない場合もあります(Z80には8ビットバイトと1バイトワードがありましたが、レジスタを2倍にして、16ビットを含む16ビットをサポートすることができました。アドレッシング)。

ここでも、CとC ++の違いがわかります。ここで、intはワードサイズlongで定義され、「ロングワード」の概念を持つプロセッサを利用するように定義されていますint。最小値と最大値もlimits.hヘッダーにあります。(実際、時間が経つにつれてint、他の場所で一般的なものとの一貫性、intの配列のメモリ使用量の削減、およびおそらく私がしない他の懸念の組み合わせとして、自然なワードサイズよりも小さいと定義される可能性があります知ってる)。

Javaおよび.NET言語は、すべてのアーキテクチャーで修正された定義intを採用し、その違いに対処することをランタイム(特にJITter)が対処するための問題にするアプローチを採用しています。longただし、.NETでも、(安全でないコードでの)ポインターのサイズは、言語によって課せられるワードサイズではなく、アーキテクチャによって異なり、基になるワードサイズになります。

したがって、オクテット==バイトとワードの関係はバイトの整数(および2、4、8などの2進数の整数)が一般的であるにもかかわらず、オクテット、バイト、およびワードはすべて互いに非常に独立しています。今日。

于 2010-08-07T23:28:13.157 に答える
9

すべてのバイトが8ビットというわけではありません。いくつかは7、いくつかは9、いくつかは完全に他の値です。8が重要である理由は、最近のほとんどのコンピューターでは、これが1バイトの標準ビット数であるためです。ニコラが述べたように、ビットは実際の最小単位です(単一のバイナリ値、trueまたはfalse)。

後で説明するように、この記事http://en.wikipedia.org/wiki/Byteでは、バイトとその可変サイズの履歴について詳しく説明しています。

8、256、およびその他の数値が重要である理由の背後にある一般的な理由は、それらが2の累乗であり、コンピューターが基数2(2進数)のスイッチシステムを使用して実行されることです。

于 2010-08-07T23:11:35.287 に答える
5

ASCIIエンコーディングには7ビットが必要であり、EBCDICには8ビットが必要でした。拡張ASCIIコード(ANSI文字セットなど)は、8番目のビットを使用して、グラフィック、アクセント付き文字、およびその他の記号で文字セットを拡張しました。一部のアーキテクチャでは、独自のエンコーディングを使用していました。この良い例は、36ビットのマシンワードを備えたDECPDP-10です。このアーキテクチャの一部のオペレーティングシステムは、ファイル名などのさまざまな目的でマシンワードに6文字を格納するパックエンコーディングを使用していました。

1970年代までに、16ビットアーキテクチャであるDGNovaとDECPDP-11の成功と、32ビットマシンワードを備えたIBMメインフレームにより、業界はデフォルトで8ビット文字に向かって押し進められていました。1970年代後半の8ビットマイクロプロセッサはこの環境で開発され、特にUART、ROMチップ、FDCチップなどの既製の周辺機器が8ビットデバイスとして構築されていたため、これは事実上の標準になりました。

1970年代の後半までに、業界は事実上の標準として8ビットに落ち着き、12ビットのマシンワードを備えたPDP-8などのアーキテクチャはやや限界に達しました(ただし、PDP-8 ISAおよび派生物はまだ組み込みシステム製品に表示されています) )。Intel80x86およびMC68Kファミリなどの16ビットおよび32ビットのマイクロプロセッサ設計が続きました。

于 2010-08-07T23:43:56.883 に答える
3

コンピューターは2進数で動作するため、2の累乗がすべて重要です。

8ビットの数値は256(2 ^ 8)の異なる値を表すことができ、英語のすべての文字とかなりの数の余分な文字に十分です。そのため、8と256の数字が非常に重要になりました。
多くのCPU(以前も今もそうです)が8ビットでデータを処理するという事実は大いに役立ちました。

あなたが聞いたことがあるかもしれない2つの他の重要な力は1024(2 ^ 10 = 1k)と65536(2 ^ 16 = 65k)です。

于 2010-08-07T23:10:22.997 に答える
3

コンピュータはデジタル電子機器に基づいて構築されており、デジタル電子機器は州と連携しています。1つのフラグメントは、1または0の2つの状態を持つことができます(電圧があるレベルを超えている場合は1、そうでない場合はゼロです)。その動作を表すために、バイナリシステムが導入されました(十分に導入されていませんが、広く受け入れられています)。

だから私たちは少しになります。ビットは、バイナリシステムで最小のフラグメントです。1または0の2つの状態のみを取ることができ、システム全体のアトミックフラグメントを表します。

私たちの生活を楽にするために、バイト(8ビット)が導入されました。いくつかの例えを与えるために、私たちは体重をグラムで表現しませんが、それは体重の基本的な尺度ですが、使いやすく、使用法を理解しやすいので、キログラムを使用します。1キログラムは1000グラムであり、3の累乗で10として表すことができます。したがって、バイナリシステムに戻り、同じ累乗を使用すると、8が得られます(3の累乗の2は8です)。これは、毎日のコンピューティングでビットのみの使用が非常に複雑だったためです。

それが続いたので、将来、8バイトが再び小さすぎて使用が複雑になることに気付いたとき、累乗に+1を追加し(4の累乗の2は16)、2^5は32になります。 、などのようになり、256は8の累乗で2になります。

だからあなたの答えは、私たちはコンピュータのアーキテクチャのためにバイナリシステムに従います、そして私たちは表現する力の値を上げて、私たちが毎日簡単に処理できるいくつかの値を取得します、そしてそれはあなたがビットからバイトに到達した方法です(8ビット)など!

2、4、8、16、32、64、128、256、512、1024など)(2 ^ x、x = 1,2,3,4,5,6,7,8,9 10など)

于 2010-08-07T23:35:01.650 に答える
2

ここで重要な数は2進数0または1です。他のすべての質問はこれに関連しています。

クロード・シャノンジョージ・ブールは、現在情報理論とブール代数と呼ばれているものについて基本的な作業を行いました。要するに、これは、数字、論理、jpg写真などのより複雑な情報を0 OFF表現する機能のみを備えたデジタルスイッチの基本です。1 ONバイナリは、現在私たちが知っているコンピュータの基礎ですが、他の数ベースのコンピュータまたはアナログコンピュータは完全に可能です。

人間の10進数の算術では、10の累乗が重要です。10、100、1000、10,000はそれぞれ重要で便利なようです。バイナリベースのコンピュータを入手すると、2の累乗があり、同様に重要になります。アルファベット、句読点、および制御文字には2 ^ 8=256で十分です。(さらに重要なことに、アルファベット、句読点、および制御文字には2 ^ 7で十分であり、これらのASCII文字とチェックビットには2 ^ 8で十分です。)

于 2010-08-07T23:52:24.853 に答える
1

主な理由は、IBMPCの元の設計に関係していると思います。Intel 8080 CPUは、後にIBMPCで使用される8086の最初の前身でした。8ビットレジスタがありました。したがって、アプリケーションのエコシステム全体が8ビットのメタファーを中心に開発されました。下位互換性を維持するために、Intelは8ビットレジスタを保持するように後続のすべてのアーキテクチャを設計しました。したがって、8086およびその後のすべてのx86 CPUは、何年にもわたって新しい16ビットおよび32ビットレジスタを追加したにもかかわらず、下位互換性のために8ビットレジスタを保持していました。

私が考えることができるもう1つの理由は、8ビットが基本的なラテン文字セットのフィッティングに最適であるということです。4ビットに収めることはできませんが、8ビットに収めることはできます。したがって、256値のASCII文字セット全体を取得できます。これは、文字セットを収めるのに十分なビットがある2の最小の累乗でもあります。もちろん、最近のほとんどの文字セットは実際には16ビット幅(つまりUnicode)です。

于 2010-08-07T23:12:37.157 に答える
1

通常、基数10でカウントしますが、1桁の値は10の異なる値のいずれかになります。コンピューター技術は、オンまたはオフのいずれかが可能なスイッチ(微視的)に基づいています。これらのいずれかが1桁を表す場合、その桁は1または0のいずれかになります。これは基数2です。

そこから、コンピューターは一連の2桁の数字として構築された数値を処理することになります。

  • 1桁、2つの値
  • 2桁、4つの値
  • 3桁、8つの値など。

プロセッサを設計するときは、プロセッサが動作するように最適化されるサイズを選択する必要があります。CPUにとって、これは「単語」と見なされます。以前のCPUは、4ビットのワードサイズと8ビット(1バイト)の直後に基づいていました。現在、CPUは主に32ビットおよび64ビットワードで動作するように設計されています。しかし実際には、2つの状態の「スイッチ」が、すべてのコンピューターの数値が2の累乗になる傾向がある理由です。

于 2010-08-07T23:20:38.137 に答える
1

Charles Petzoldは、まさにこの質問をカバーするCodeと呼ばれる興味深い本を書きました。第15章「バイトと16進数」を参照してください。

その章からの引用:

8ビット値は、加算器、ラッチ、およびデータセレクタへの入力であり、これらのユニットからの出力でもあります。8ビット値もスイッチによって定義され、電球によって表示されます。したがって、これらの回路のデータパスは8ビット幅であると言われます。しかし、なぜ8ビットなのですか?なぜ6または7または9または10ではないのですか?

...そのように構築しなければならなかった理由は本当にありません。当時、8ビットは便利な量であるように見えました。

...しばらくの間、バイトは単に特定のデータパスのビット数を意味していました。しかし、1960年代半ばまでに。IBMのSystem/360(ビジネスコンピューターの大規模な複合体)の開発に関連して、この単語は8ビットのグループを意味するようになりました。

... IBMが8ビットバイトに引き寄せられた理由の1つは、BCDと呼ばれる形式で数値を簡単に格納できることでした。しかし、前の章で説明するように、偶然にも、世界中のほとんどの書記言語(中国語、日本語、韓国語で使用される表意文字を除く)は256未満で表現できるため、1バイトはテキストの格納に理想的です。文字。

于 2010-08-09T08:50:58.117 に答える
0

歴史的な理由だと思います。8は2の累乗であり、2 ^ 2は4であり、2 ^ 4 = 16はほとんどの目的には少なすぎ、16(2の次の累乗)ビットハードウェアはかなり遅れて登場しました。

しかし、主な理由は、8ビットマイクロプロセッサ、次に16ビットマイクロプロセッサがあり、その単語は2オクテットなどとして非常によく表現できるという事実にあると思います。あなたが知っている、歴史的な残骸と後方互換性など。

「スケールダウン」に対するもう1つの同様に実用的な理由:たとえば、4ビットを1ワードとして使用すると、基本的に8ビットと比較して半分のトラフィックしか得られません。はるかに速くオーバーフローすることは別として。

たとえば、1オクテットで0..15の範囲の2つの数字をいつでも絞ることができます...手でそれらを抽出する必要があります。しかし、メモリに並べて保持する膨大な数のデータセットがない限り、これは努力する価値がありません。

于 2010-08-07T23:21:52.813 に答える