歴史的に、バイトのサイズは常に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進数の整数)が一般的であるにもかかわらず、オクテット、バイト、およびワードはすべて互いに非常に独立しています。今日。