web-dev-qa-db-ja.com

バイトに0〜255しかないのはなぜですか?

バイトの範囲が0〜255だけなのはなぜですか?

31
Strawberry

厳密に言えば、「バイト」という用語は実際には256以外の値を持つユニットを指します。それはちょうどそれがほぼ普遍的なサイズだということです。 From Wikipedia

歴史的に、バイトはコンピューターでテキストの単一文字をエンコードするために使用されるビット数であり、このため多くのコンピューターアーキテクチャの基本的なアドレス可能な要素です。

バイトのサイズは歴史的にハードウェアに依存しており、サイズを強制する明確な標準は存在しません。 8ビットの事実上の標準は、1バイトに値0〜255を許可する便利な2の累乗です。多くのタイプのアプリケーションは、8ビット以下で表現可能な変数を使用し、プロセッサー設計者はこの一般的な使用法に合わせて最適化します。主要な商用コンピューティングアーキテクチャの人気は、8ビットサイズのユビキタスな受け入れに役立っています。用語オクテットは、用語バイトに関連するあいまいさのために、8ビットのシーケンスを明示的に示すために定義されました。

皮肉なことに、最近では「単一の文字」のサイズはほとんどの場合単一バイトとは見なされなくなりました...最も一般的には、「文字」の概念はUnicodeに関連付けられており、形式ですが、通常は16ビットまたは32です。

UCS-4/UTF-32(Unicodeの直接的な32ビット表現)を使用して32ビットをバイトとして指定するシステムにとっては面白いでしょう。引き起こされる混乱は壮観です。

ただし、「バイト」を「オクテット」と同義と見なすと、8つの独立した bits があり、それぞれがonまたはoff、trueまたはfalse、1または0のいずれかであるが、それについて考えたい。通常、0から255の番号が付けられた256個の値が得られます(ただし、常にそうとは限りません。たとえば、Javaの設計者は、残念ながらバイトをsigned-128〜127の範囲の整数。

52
Jon Skeet

byte は標準定義では8ビットであり、256個の値(0から255)を表すことができるためです。

26
Daniel A. White

バイト≠オクテット

バイトの範囲が0〜255だけなのはなぜですか?

そうではありません。

オクテットには8ビットがあるため、28 可能性。 byteは不明確です。 2つの用語は完全に互換性がないため、2つの用語を同一視しないでください。また、符号付き文字(ʏᴏᴜᴋɴᴏwᴡʜᴏʏᴏᴜᴀʀᴇ!)のみをサポートする邪悪なプログラミング言語は、0〜255ではなく、-128〜127の値のみを表すことができます。

ビッグアイアンはRustに時間がかかります。

すべてではありませんが、ほとんどの最新マシンはすべて8ビットバイトを備えていますが、これは比較的最近の現象です。確かにいつもそうであったわけではありません。非常に初期のコンピューターの多くは4ビットバイトでしたが、最近では6ビットバイトが比較的一般的でした。これらのタイプのバイトは両方とも、255よりもfewer値を保持します。

これらの6ビットバイトは非常に便利です。ワードサイズが36ビットの場合、このような6バイトはジガーせずにこれらの36ビットワードの1つにきれいに収まるからです。 Fieldata を保持するのに非常に役立つ場合、非常に人気のある Sperryᴜɴɪᴠᴀᴄ コンピューターで使用されます。 6ビットのFieldataではなく、4ビットのnotsᴀ文字のみを36ビットWordに収めることができます。私が学部生だったときにコンピューティングセンターに1100シリーズがありましたが、これは現代の2200シリーズにも当てはまります。

ASCIIを入力

ᴀsᴄɪɪ—これはであり、8ビットコードではなく7‑のみであり、その世界から脱出する道を開きました。 ɪʙᴍ36 の重要性は、「s」を保持しているかどうかにかかわらず8ビットバイトでしたが、控えめに言ってはなりません。

それにもかかわらず、多くのマシンは長い間サポートしていました ᴅᴇᴄ ’Radix‑5 。これは40文字のレパートリーであり、2つの異なるエンコードスキームの下で、3つの文字を1つの16ビットワードに効率的にパックできます。私は大学時代にᴅᴇᴄᴘᴅᴘ‑11とVaxenをたくさん使用しましたが、Rad‑50は人生の事実であり、収容する必要がありました。

23
tchrist

バイトには8ビット(8つの1または0)01000111 = 71があります

各ビットは値1,2,4,8,16,32,64,128を表しますが、右から左へ?

128, 64, 32, 16, 8, 4, 2, 1,
0    1   0   0   0  1  1  1 =71
1    1   1   1   1  1  1  1 = max 255
0    0   0   0   0  0  0  0 = min 0

バイナリ1または0を使用し、8ビット(1バイト)のみを使用して、

各値の1つ1 X 128、1 X 64、1 X 32など、最大合計255および最小0

6
Glen

あなたは間違っている!バイトの範囲は0〜63または0〜99です。

を信じますか?神は Holy Bible で言った。

情報の基本単位はバイトです。各バイトには不特定の量の情報が含まれますが、少なくとも64個の異なる値を保持できる必要があります。つまり、0〜63の任意の数値を1バイトに含めることができることを知っています。さらに、各バイトには最大100個の個別の値が含まれます。したがって、バイナリコンピューターでは、バイトは6ビットで構成されている必要があります。 10進数のコンピューターでは、バイトごとに2桁の数字があります。

そして...

*1975年以降、「バイト」という言葉は、0〜255の数字を表すことができる正確に8桁の2進数のシーケンスを意味するようになりました。したがって、実世界のバイトは仮想のMIXマシンのバイトよりも大きくなります。実際、MIXの古いスタイルのバイトは、ナイブルよりもわずかに大きいだけです。 MIXに関連してバイトについて話すときは、バイトがまだ標準化されていなかった時代を思い出して、以前のWordの意味に限定する必要があります。 -ドナルドクヌースによって書かれたコンピュータープログラミングの芸術、第1巻。

:-)

6
RedPain

1バイトには8ビットしかありません。ビットは2進数です。そのため、バイトには2(バイナリ)^ 8の数値を0〜2 ^ 8-1 = 255の範囲で保持できます。

これは、3桁の10進数が0〜999の値を表すことができる理由を尋ねるのと同じで、同じ方法(10 ^ 3-1)で回答されます。

元々、バイトは常に8ビットではありませんでした。それらは、「6」、「7」、または「9」ビットである可能性のある「2、3」ビットを表しています。それは後に標準化され、コンピュータ化のバイナリの性質により、これらのユニットを2のべき乗にすることが理にかなっています。したがって、ニブル(4ビット、または半バイト)と8ビットバイトが来ました。

[編集]それが、8進数と16進数の番号付けが一般的になった理由でもあります。 1つの8進数は3ビットを表し、1つの16進数は4ビットを表します。したがって、16進数の数字は1バイトを正確に表すことができます。 0から255よりも0から0xFFの数字を使用する方がはるかに理にかなっています。

5
GolezTrol

PDP-10シリーズのコンピューターでは、バイトは可変長の構造体であり、ビット数と記憶領域の先頭からのオフセットを定義する「バイトポインター」によって定義されます。次に、バイトポインタを処理するための一連のマシン命令がありました。

  • LDB-バイトのロード
  • DPB-入金バイト
  • ILDB-ポインタをインクリメントしてから、バイトをロード
  • IDPB-インクリメントポインター、その後、デポジットバイト(これが正しいことを願っています-正しく感じられません)

実際、「バイト」は今日私たちがビットフィールドと呼ぶものでした。バイトポインターを使用して同じサイズの一連のバイトの次を表すことは、その用途の1つにすぎません。

使用中の文字セットの一部は「6ビット」(大文字のみ、36ビットWordに6バイト)、ASCII(大文字、小文字、Wordに5バイト、そして、まれにEBCDIC(IBMキャラクタセット、Wordごとに4つの8ビットバイトを使用し、Wordごとに4ビットを未使用のままにしていた)のみです。

3
John Saunders

厳密に言えば、そうではありません。

ほとんどの最新のシステムでは、バイトは8バイナリビットですが、一部のシステムでは常にそうであるとは限りませんでした(多くの古いコンピューターは、7ビットを使用してASCII文字(別名バイト)、多くの場合、たとえば6ビット文字(バイト)に基づいています)。

8ビットバイトについて話している場合、これは任意の範囲を表すことができます。ただし、256個の異なる値のみを表すことができるため、通常は0..255(「符号なしバイト」)または-128 .. + 127(「符号付きバイト」)を表すために使用されます。

3
Jason Williams