今回はコンピューターの記憶単位について話していきます。型の大きさもこの記憶単位に大きく関わってきます。
では、今回の要点です。
では、いってみましょう。
コンピューターはどのようにデータを表現しているか知っていますか? 実は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 char | 1バイト | 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) |
小数型 | ||
float | 4バイト | ±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 が入ります。
以下が今回の要点でした。
では、また次回まで。さようなら。
Last update was done on 2005.2.16
この講座の著作権はロベールが保有しています