変数の型
変数は値を保管するための場所であると説明しました。その保管する場所はどんな値でも可能できるわけではなく予めどのような値を格納するための場所なのかを指定しておく必要があります。
指定するには例えば数値を格納するための場所であるとか文字を格納するための場所であるとか指定します。
数値格納用の変数を用意し「10」と言う数値を格納する 文字格納用の変数を用意し「b」と言う文字を格納する
このように変数にはどのような値を格納する変数なのかを指定する必要がありますが、数値や文字といった指定はプログラムの中では出来ません。C言語では指定できるデータの種類を型と呼ばれるもので定義しています。
データの型には次のようなものがあります。
種類 | 型名 | サイズ | 値の範囲 |
---|---|---|---|
文字型 | char | 1バイト | -128 ~ 127 |
整数型 | short int int long int | 2バイト 4バイト 4バイト | -32768 ~ 32767 -2147483648 ~ 2147483647 -2147483648 ~ 2147483647 |
浮動小数点型 | float double long double | 4バイト 8バイト 8バイト | 3.4E-38 ~ 3.4E+38 1.7E-308 ~ 1.7E+308 1.7E-308 ~ 1.7E+308 |
型ごとに割り当てられるサイズが異なり、サイズに応じて型に格納可能な値の範囲が設定されます。例えば「char」型の場合は1バイトですので「char」型の変数には「-128 ~ 128」の値しか格納できません。それに対して「int」型の場合は4バイトですので「int」型の変数には「-2147483648 ~ 2147483647」の値が格納できます。
int型の変数を用意し「10」と言う数値を格納する char型の変数を用意し「b」と言う文字を格納する
「char」型は整数型の1バイトの型ですが、アルファベット1文字を格納するのに適した型のため文字型と呼ばれています。また「short int」は「short」、「long int」は「long」と記述しても構いません。
なお、型に対してどれだけのサイズを割り当て、結果としてどれだけの値を格納できるのかについては厳密に規定はされておらずコンパイラなど開発環境によって異なる場合があります。上記はあくまで目安とお考え下さい。
unsigned修飾子
型によってサイズが決まり、サイズに応じて格納できる値の大きさが決まってきます。特に指定しない場合は格納できる値として負の値も格納できるようになっていますが、負の値を使わないことが分かっている場合にはその分を正の値を格納するために使うことが出来ます。
このように負の値を使わない場合にはデータ型の前に「unsigned」を付けます。それに対して正も負も扱う場合には「signed」を付けることになっていますがどちらも指定しなかった場合は「signed」がデフォルトとなっているため通常は省略します。
種類 | 型名 | サイズ | 値の範囲 |
---|---|---|---|
文字型 | unsigned char | 1バイト | 0 ~ 255 |
整数型 | unsigned short int unsigned int unsigned long int | 2バイト 4バイト 4バイト | 0 ~ 65535 0 ~ 4294967295 0 ~ 4294967295 |
正の数だけ使うことが分かっている場合は、同じサイズの型でより大きい値を格納することが出来るようになります。
型のサイズを確認
先ほど記載した通り、型に対して何サイズを割り当てるのかはC言語では規定されていないため開発環境毎に異なる可能性があります。ご自分の開発環境で型に対するサイズを確認するには「sizeof(型名)」で調べることが可能です。
簡単なプログラムで型に対するサイズを確認してみます。(単に確認を行ってみるだけですので、プログラムの内容について理解できなくても構いません。結果だけを見てください)。
#include <stdio.h> int main(void){ printf("char : %d¥n", sizeof(char)); printf("short int : %d¥n", sizeof(short int)); printf("int : %d¥n", sizeof(int)); printf("long int : %d¥n", sizeof(long int)); printf("float : %d¥n", sizeof(float)); printf("double : %d¥n", sizeof(double)); printf("long double : %d¥n", sizeof(long double)); return 0; }
上記を「test2-1.c」の名前で保存します。まずコンパイルを行います。
コンパイルが終わりましたら「test2-1」と入力して実行します。
「Borland C++ Compiler 5.5」の環境では「long double」型は10バイトが割り当てられているようです。
( Written by Tatsuo Ikura )