“It’s all 1s and 0s”. 冗談や皮肉を言うときに人はこれを言う。 コンピュータの思考に関しては、本当にその通りなのです。 そして、ハードウェアのレベルでは、それがすべてなのです。 プロセッサー、メモリー、各種ストレージ、USB、HDMI、ネットワーク接続など、携帯電話、タブレット、ノートパソコン、デスクトップなど、そのすべてが「1」と「0」しか使っていないのです。 バイトは、1と0をグループ化するためのものです。 そのため、バイトは整理整頓の大きな助けになるのです。
バイトは、コンピュータに保存され使用されるデータやプログラムの測定単位です。 バイトはコンピュータの歴史の中で長い間存在し、いくつかの形式がありましたが、現在の8ビットの長さはよく定着しています。 バイトは、単独または隣接するグループとして、コンピュータのビットを整理する最も一般的な方法として一般に認められています。 ビットは2進数であり、2つの値しか持つことができません。 コンピュータでは、ビットが持つことのできる値は0(ゼロ)と1(イチ)の2つである。 それ以外の選択肢はない。 1バイトは8つの2進数ビットで、これを組み合わせて2進数を表します。
以下の表は、1つのビッグエンディアンバイトを示し、このバイトの個々のビットと関連する2の累乗を表しています。 データのバイトはすべてビッグエンディアン形式である。 プログラムコードなど、エンディアン形式が適用されないバイトもある。 参考のため、各ビットに2の累乗の10進数値を表示する。 ビット3とビット4の間にある線は、バイトをニブルと呼ばれる4つのビット群に分割しているところだと想像してください。 リトルエンディアンは、非常によく使われるバイトフォーマットです。 エンディアンの詳細については、今後ともよろしくお願いします。 名前が気になる方は、(エンディアンの語源)で検索してみてください。
1つのビッグエンディアンバイトです。
Bit0 | Bit1 | Bit2 | Bit3 | Bit4 | Bit5 | Bit6 | Bit7 | |
Power of 2 | 27 | 26 | 25 | 24 | 23 <2954> | 22 | 21 | 21 |
10進値 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1バイトの各ニブルには下表のように4ビット2進数を格納することができます。 ビットが “1 “に設定されると、その2の累乗がニブルの値に加算されます。 ビットが “0 “に設定されている場合、その2の累乗はニブルの値に加算されません。 2つのニブルからなるバイトは、2桁の16進数を格納することができる。 コンピュータが使えるのは、実はビットだけなのだ。 プログラマーやコンピュータのハードウェアを開発するエンジニアは、ビットの扱いを容易にするために16進数を使っています。 下の表は、最上位ビットが左の20, 21, 22, 23
ビッグエンディアンニブル1個です。
2進 数 |
16進 値 |
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 | 110 | a |
1011 | b | 1100 | C |
1101 | D | E | 1111 | F |
Big-について説明します。エンディアンは、1バイトの図から始めます。 この枠の端にある長い線はバイトの境界線で、隣接するバイトのグループを描く場合、あるバイトがどこで終わり、別のバイトがどこで始まるかが明確になります。 小さな線は、フレームを個々の場所に分割し、8ビットのそれぞれを表示することができます。 中央の中線は、バイトを4ビットずつ2つに分割したもので、これがニブルと呼ばれるものです。 ニブルにもさまざまな歴史がある。 標準化されているのを見たことがない。 しかし、現在では、ニブルは4ビットのグループであるというのが定説になっています(下図)。 これらの線はすべて、人々がバイトを描くときにのみ存在します。
Upper Nibble と Lower Nibble は、ビッグエンディアンバイトで使用されるラベルです。 ビッグエンディアンでは、最上位桁は数値の左端になります。 つまり、下位ニブルは、バイト内の数値の最下位半分になります。 同様に、最下位ビットは右側にあります。LSBit(通常LSBと表記)はLeast Significant Bitの略です。 そして、最上位ビットは左側です。 左側のUpper Nibbleは、数値の最上位半分にあたります。 MSBit(通常MSBと表記)は最上位ビットのことです。 これは、10進数で最上位桁を左に書く方法と同じです。 6076>
バイトは16進数2桁を保持できるため、1バイトは00からFF(10進数で0から255)までの16進数を保持できます。したがって、バイトを使って人間が読める言語の文字を表す場合、各文字や句読点などに番号をつければよいのです。 (これはバイトの使い方のひとつに過ぎません。 バイトは、コンピュータが実行するプログラム コード、持っている可能性のあるさまざまなデータの番号、および CPU、メモリ、ストレージ、またはさまざまなバスやインターフェイス ポートで動き回るコンピュータに生息する他のすべてのものとしても使用されます。 リトル・エンディアン(Little-Endian)は、これまでの例で使用されています。 その特徴は、最上位桁が左にあり、最下位桁が右にあることです。
また、リトルエンディアンというフォーマットも存在します。 これは、ビッグエンディアンとは逆に、左側が最下位桁、右側が最上位桁になります。 これは、10進数の書き方と逆です。 リトルエンディアンは、バイトの中のビットの順番には使われませんが、大きな構造体の中のバイトの順番に使われます。 例えば 例えば、2バイトのリトルエンディアンワードに含まれる大きな数値は、最下位バイトが左側になります。 もし2バイトの数値がビッグエンディアンであれば、最上位バイトは右側になります。 リトルエンディアンは、より大きなデータ構造でバイトの重要な順序を設定するために、長いマルチバイト数値のコンテキストでのみ使用されます。 しかし、リトル エンディアンはマイクロプロセッサーで使用される傾向があります。 ほとんどのPCに搭載されているx86-64プロセッサは、リトルエンディアンバイトフォーマットを採用しています。 ただし、それ以降の世代では、ビッグエンディアン形式を限定的に使用できる特別な命令が用意されています。 ビッグエンディアンバイトフォーマットは、ネットワークや、特に大型のZコンピュータで広く使われています。 現在では、必ずしもどちらか一方に限定されるわけではありません。 新しいARMプロセッサーでは、どちらのエンディアン形式も使用できます。 マイクロプロセッサのように、ビッグエンディアンとリトルエンディアンの両方のバイトオーダーを使用できるデバイスは、バイエンディアンと呼ばれることがあります。 そのため、複数のバイトで構成される長いフォーマットが用意されています。 たとえば、次のようなものです。 x86-64プロセッサでは、16ビットまたは2バイトのワードが、いわば頭から尻尾まで隣り合わせに並んでいます。 また、ダブルワード(32ビットまたは4バイト)、クアッドワード(64ビットまたは8バイト)もあります。
言語を扱うプログラマーは、ビットとバイトを組織化する方法をもっとたくさん持っています。 プログラムが完成すると、コンパイラや他のメカニズムが、プログラムのビットとバイトを、CPUハードウェアが処理できるデータ形式に変換します。