コンピューターを 5 分以上使用したことがある方なら、 「ビット」や「バイト」という言葉を聞いたことがあるでしょう。 RAMとハードディスクの容量はどちらもバイト単位で測定され、ファイル ビューアで調べるときのファイル サイズも同様です。
「このコンピュータには、64メガバイトの RAM と 2.1ギガバイトのハードディスク容量を備えた32 ビットPentium プロセッサが搭載されています。」という広告が聞こえるかもしれません。また、「コンピューター入門」 の記事の多くはバイトについて説明しています (たとえば、 「CD の仕組み」)。この記事では、完全に理解できるようにビットとバイトについて説明します。
10 進数
ビットを理解する最も簡単な方法は、ビットを既知のもの、つまり数字と比較することです。数字は、0 から 9 までの数値を保持できる 1 つの場所です。通常、数字はグループに結合されて、より大きな数字を作成します。たとえば、6,357 は 4 桁です。数字 6,357 では、「1 の位」は 7 で埋められ、10 の位は 5 で埋められ、100 の位は 3 で埋められ、1,000 の位は 6 で埋められていることがわかります。したがって、明示的にしたい場合は、次のように表現できます。
(6 * 1000) + (3 * 100) + (5 * 10) + (7 * 1) = 6000 + 300 + 50 + 7 = 6357
これを表現する別の方法は、 10 の累乗を使用することです。 「の乗」という概念を「^」記号で表現すると仮定すると(つまり「10の2乗」は「10^2」と表記されます)、別の表現方法は次のようになります。
(6 * 10^3) + (3 * 10^2) + (5 * 10^1) + (7 * 10^0) = 6000 + 300 + 50 + 7 = 6357
この式からわかることは、各桁が 10 のゼロ乗の最初の桁から始まる、次に大きい 10 のべき乗のプレースホルダーであるということです。
これはすべて非常に快適なはずです。私たちは毎日 10 進数を扱います。数値体系の優れた点は、1 つの数字に 10 個の異なる値を強制する必要がないことです。私たちの指が 10 本あるために10 進数の数体系が発達した可能性がありますが、たまたま指が 8 本になるように進化した場合は、おそらく 8 進数の数体系になるでしょう。何でも基本的な数値システムを使用できます。実際、さまざまな状況でさまざまなベースを使用する正当な理由がたくさんあります。
コンピュータは、たまたま 2 進数体系としても知られる 2 進数体系を使用して動作します (10 進数体系が 10 進数体系として知られているのと同じです)。次のセクションで、その理由と仕組みを説明します。
Base-2 システムと 8 ビット バイト
コンピューターが 2 進法を使用する理由は、現在の電子技術を使用してコンピューターを実装するのがはるかに簡単になるためです。配線して 10 進数で動作するコンピューターを構築することもできますが、現時点では恐ろしいほど高価になります。一方、base-2 コンピューターは比較的安価です。
したがって、コンピューターは 2 進数を使用するため、10 進数の代わりに2 進数を使用します。ビットという言葉は、「Binary digIT」という言葉を短縮したものです。 10 進数には 0 から 9 までの 10 個の値がありますが、ビットには 0 と 1 の 2 つの値しかありません。したがって、2 進数は、1011 のように 0 と 1 だけで構成されます。二進数の1011は何ですか?上で 6357 に対して行ったのと同じ方法で実行しますが、基数 10 の代わりに 2 を使用します。つまり、次のようになります。
(1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 8 + 0 + 2 + 1 = 11
2 進数では、各ビットが 2 の累乗の値を保持していることがわかります。これにより、2 進数でのカウントが非常に簡単になります。 0 から始まり 20 まで、10 進数と 2 進数でカウントすると次のようになります。
0 = 0 1 = 1 2 = 10 3 = 11 4 = 100 5 = 101 6 = 110 7 = 111 8 = 1000 9 = 1001 10 = 1010 11 = 1011 12 = 1100 13 = 1101 14 = 1110 15 = 1111 16 = 10000 17 = 10001 18 = 10010 19 = 10011 20 = 10100
この順序を見ると、0 と 1 は 10 進数でも 2 進数でも同じです。番号 2 では、二進法で桁上げが最初に行われることがわかります。ビットが 1 で、それに 1 を加えると、そのビットは 0 になり、次のビットは 1 になります。15 から 16 への移行では、この効果は 4 ビットをロールオーバーし、1111 が 10000 に変わります。
コンピューター内でビットが単独で使用されることはほとんどありません。これらはほとんどの場合、8 ビットのコレクションにバンドルされており、これらのコレクションはbytesと呼ばれます。なぜ 1 バイトに 8 ビットがあるのでしょうか?同様の質問は、「なぜ 12 個の卵に 12 個の卵があるのですか?」です。 8 ビット バイトは、人々が過去 50 年間にわたって試行錯誤を繰り返して決定したものです。
次に示すように、1 バイトが 8 ビットの場合、0 ~ 255 の範囲の 256 個の値を表すことができます。
0 = 00000000 1 = 00000001 2 = 00000010 ... 254 = 11111110 255 = 11111111
「CD の仕組み」の記事では、CD がサンプルごとに 2 バイト、つまり 16 ビットを使用することがわかります。これにより、次のように各サンプルに 0 ~ 65,535 の範囲が与えられます。
0 = 0000000000000000
1 = 0000000000000001
2 = 0000000000000010
...
65534 = 1111111111111110
65535 = 1111111111111111
次に、バイトの使用方法の 1 つを見ていきます。
標準 ASCII 文字セット
バイトは、テキスト文書内の個々の文字を保持するためによく使用されます。 ASCII 文字セットでは、0 ~ 127 の各バイナリ値に特定の文字が与えられます。ほとんどのコンピュータは、ASCII 文字セットを拡張して、1 バイトで使用可能な 256 文字の全範囲を使用します。上位 128 文字は、一般的な外国語のアクセント付き文字などの特殊なものを処理します。
以下に 127 の標準 ASCII コードを示します。コンピュータは、これらのコードを使用して、テキスト ドキュメントをディスクとメモリの両方に保存します。たとえば、Windows 95/98 のメモ帳を使用して、「4 スコアと 7 年前」という単語を含むテキスト ファイルを作成すると、メモ帳は 1 文字あたり 1 バイトのメモリを使用します (単語間のスペース文字ごとに 1 バイトを含む)。 — ASCII 文字 32)。メモ帳がディスク上のファイルに文を保存すると、ファイルには文字ごと、スペースごとに 1 バイトが含まれます。
この実験を試してください。メモ帳で新しいファイルを開き、その中に「4 スコアと 7 年前」という文を挿入します。ファイルをgetty.txtという名前でディスクに保存します。次に、エクスプローラーを使用してファイルのサイズを確認します。ディスク上のファイルのサイズは 30 バイト、つまり 1 文字あたり 1 バイトであることがわかります。文末に単語を追加して再保存すると、ファイルサイズは適切なバイト数にジャンプします。各文字は 1 バイトを消費します。
コンピュータでファイルを見るのと同じようにファイルを見てみると、各バイトには文字ではなく数字が含まれていることがわかります。数字は文字に対応する ASCII コードです (以下を参照)。したがって、ディスク上では、ファイルの番号は次のようになります。
フォーアンドセブン 70 111 117 114 32 97 110 100 32 115 101 118 101 110
ASCII テーブルを見ると、各文字と使用されている ASCII コードが 1 対 1 で対応していることがわかります。スペースに 32 を使用することに注意してください。32 はスペースの ASCII コードです。技術的に正確にしたい場合は、これらの 10 進数を 2 進数 (つまり 32 = 00100000) に拡張することができます。これが、コンピューターが実際に物事を処理する方法です。
最初の 32 個の値 (0 ~ 31) は、キャリッジ リターンやライン フィードなどのコードです。スペース文字は 33 番目の値で、その後に句読点、数字、大文字、小文字が続きます。 127 個の値をすべて表示するには、 をチェックしてください。
次にバイトプレフィックスと二進数計算について学びます。
バイトプレフィックスとバイナリ演算
大量のバイトについて話し始めると、キロバイト、メガバイト、ギガバイトのように、キロ、メガ、ギガなどの接頭語が入ります (キロバイト、メガバイト、ギガバイト、あるいは KB、MB、GB のように、K、M、G とも短縮されます)。 )。次の表は、バイナリ乗数を示しています。
キロ (K)
2^10 = 1,024
メガ(M)
2^20 = 1,048,576
ギガ(G)
2^30 = 1,073,741,824
テラ(T)
2^40 = 1,099,511,627,776
ペタ(P)
2^50 = 1,125,899,906,842,624
エクサ(E)
2^60 = 1,152,921,504,606,846,976
ゼッタ(Z)
2^70 = 1,180,591,620,717,411,303,424
ヨッタ(Y)
2^80 = 1,208,925,819,614,629,174,706,176
このグラフでは、キロが約 1,000、メガが約 100 万、ギガが約 10 億などであることがわかります。したがって、誰かが「このコンピュータには 2 ギガのハード ドライブが付いています」と言うとき、その人が意味するのは、そのハード ドライブには 2 ギガバイト、つまり約 20 億バイト、つまり正確に 2,147,483,648 バイトが保存されるということです。どうして 2 ギガバイトのスペースが必要になるのでしょうか? CD 1 枚の容量が 650 MB であることを考えると、CD 3 枚分のデータだけですべてが満たされることがわかります。最近ではテラバイト規模のデータベースがかなり一般的になっており、おそらく今ではペタバイト規模のデータベースがいくつか出回っているでしょう。
2 進数演算は、各ビットの値が0 または 1のみであることを除けば、10 進数演算と同じように機能します。 2 進数の計算の感覚をつかむために、10 進数の加算から始めて、それがどのように機能するかを見てみましょう。 452 と 751 を追加するとします。
452 +751 --- 1203
これら 2 つの数値を加算するには、右側から始めます: 2 + 1 = 3。問題ありません。次に、5 + 5 = 10 なので、0 を保存して 1 を次の場所に繰り越します。次に、4 + 7 + 1 (桁上げのため) = 12 なので、2 を保存して 1 を桁上げします。最終的に、0 + 0 + 1 = 1。したがって、答えは 1203 です。
バイナリ加算はまったく同じように機能します。
010 +111 --- 1001
右から順に、最初の桁は 0 + 1 = 1 となります。そこには持ち込みはありません。 2 桁目は 1 + 1 = 10 なので、0 を保存して 1 を繰り上げます。3 桁目は、0 + 1 + 1 = 10 なので、0 を保存して 1 を繰り上げます。最後の桁については、 0 + 0 + 1 = 1。したがって、答えは 1001 です。すべてを 10 進数に変換すると、それが正しいことがわかります: 2 + 7 = 9。
ゲートを使用してブール加算がどのように実装されるかを確認するには、 「ブール ロジックのしくみ」を参照してください。
要約すると、ビットとバイトについて学んだことは次のとおりです。
- ビットは 2 進数です。ビットは値 0 または 1 を保持できます。
- バイトはそれぞれ 8 ビットで構成されます。
- 2 進数演算は 10 進数演算と同じように機能しますが、各ビットの値は 0 または 1 のみです。
実際には、それ以上のことは何もありません。ビットとバイトは非常に単純です。