第21章 ビットとバイト

 今回はコンピューターの記憶単位について話していきます。型の大きさもこの記憶単位に大きく関わってきます。


 では、今回の要点です。


 では、いってみましょう。


 コンピューターはどのようにデータを表現しているか知っていますか? 実は0か1の集まりで表現しています。何らかの形で聞いた人も多いと思います。知らない人もそういうもんだと思って下さい。

 つまり、コンピューターはデータを2進数で扱っているのです。そして、この1桁にあたる大きさ1ビットと言います。

 これらのことはよく電球を例に説明されます。ということで、ここでもそうしてみます。


 先ず、電球を3つ用意します。それぞれにスイッチを用意して、単独に点けたり消したりできるようにします。そして、電球に右から1、2、3と番号をつけます。

 これで数値を表現してみましょう。電球が消えている時は0で、点いている時は電球1は1、電球2は2、電球3は4とします。



 右図のようなときはどうでしょうか。

 電球1と3は点いています。ですが、電球2は消えています。

 つまり、1+4=5となります。



 次はどうでしょうか。すべての電球が消えていますね。つまり、これは0になります。



 次はどうでしょうか。電球1と2が点いています。ですが、電球3は消えています。

 つまり、1+2=3となります。



 こうしてみると分かるとおり、電球を3個用意すれば、全部消えているときの0から全部点いているときの1+2+4=7までの数値を表現することができるのです。

 この電球の個数がビット数にあたります。そして、点いている時を1、消えているときを0と考えると、2進数を電球の羅列で表現していることになります。

 この例からもわかるとおり、3ビットでは0〜7の数値を表現することができます。

 また、これを−4〜3や900〜907などのように解釈することも可能です。つまり、3ビットでは8個のデータを表現できると言えばよいでしょう。


 このように、1つの数値を表現するには大抵数ビット必要です。なので、ビット単位で情報を管理するよりは数ビット単位でデータを管理するほうが楽です。

 そこで、よく8ビット単位でデータを扱います。8ビットでは 00000000 〜 11111111、つまり256個のデータを表現することができます

 このよく使う8ビットという単位を別に1バイトと言います。このバイトというのもよく聞きますね。このファイルは何バイトだとか、ハードディスクの容量は何メガバイトだとか言うと思います。

 ファイルの容量をバイト単位で表現しているとおり、記憶、操作する際の単位はバイトが標準です。通常ビット単位では扱えません。


 コンピューターの扱うデータは大抵バイト単位で扱っているというのなら、変数もバイト単位で扱っていることになります。

 そして、変数に入れられる数の範囲は、その大きさによって制限されることになります。もちろん計算の過程や結果も制限されます。

 以下に型に対応した大きさと、とりうる値の範囲を書いておきます。但し、環境によっては値が異なる場合もあります。各環境での上限・下限を取得する方法もありますが、ここでは割愛します。

大きさ範囲
整数型
char
signed char
1バイト−128〜127
unsigned char1バイト0〜255
int(32ビット機)
signed int(32ビット機)
long
signed long
long int
signed long int
4バイト-2147483648〜2147483647
unsigned int(32ビット機)
unsigned long
unsigned long int
4バイト0〜4294967295
short
signed short
short int
signed short int
int(16ビット機)
signed int(16ビット機)
2バイト-32768〜32767
unsigned short
unsigned short int
unsigned int(16ビット機)
2バイト0〜65535
bool(C++ のみの型)1バイト0(false)か1(true)
小数型
float4バイト±1.2×10の-34乗〜±3.4×10の34乗(有効数字7桁)
double
long double(32ビット機)
8バイト±2.2×10の-308乗〜±1.8×10の308乗(有効数字15桁)
long double(16ビット機)10バイト±3.4×10の-4932乗〜±1.2×10の4932乗(有効数字19桁)

 例えば、

char a;

であるときは、a には−128から127の数値しか入れられません。それ以外の数値を入れようとすると、下1バイト、つまり2進数での下8桁が適用されます。


 最後に型キャストについて話します。

 型キャストとは、型を変更するものです。例えば、

int a;
char b = -1;

a = (unsgined char)b;

とすれば、b の値、つまり -1 を unsigned char に変換して、それを a に代入することになります。細かいことは話しませんが、char の -1 は unsigned char の 255 にあたります。つまり、a には -1 でなく 255 が入ります


 以下が今回の要点でした。


 では、また次回まで。さようなら。


第20章 多条件分岐 | 第22章 文字とは

Last update was done on 2005.2.16

この講座の著作権はロベールが保有しています