C言語講座 - 2 変数

今回は変数をやります。 変数というのは、数値や文字などのデータを格納するものです。 そして、格納するデータの種類によって変数の型を使い分けます。

また、変数名にはルールがあります。 変数名、関数名は普通、小文字で書きます。又、マクロ(後述)は普通大文字で書きます。


int i = 1024; /* 整数 */
double d = 3.1416; /* 小数 */
char c = 'A'; /* 文字 */

/* 表示 */
printf("int = %d\ndouble = %f\nchar = %c\n\n",i,d,c);

int は変数の型、次の i は変数の名前、= は中に入れるという演算子で、1024 は中にいれる値です。 つまり、i という名前の int型 変数を、1024 で初期化しているという事です。 初期化というのは、変数の宣言と同時に中身を入れることで、同時でないときは代入といいます。

んで、int は普通、整数を入れるときに使う型です。 double は浮動小数点数という、簡単に言えば小数を入れる型です。 char は普通1文字を入れます。1文字は '(シングルクォーター) で囲みます。 沢山文字を使うときは「char型の配列」を使いますが、配列についてはまた後で。

その後、やはり printf で表示していますが、変数の型によって書式を変えなければいけません。 具体的には int(整数)なら %d , double(小数)なら %f , char(文字)なら %c といった具合です。

ところで、/* */ というのがありますが、これはコメントといってプログラムのメモ書きなどをここにします。 コンパイラはここを読み飛ばすので、コメント内なら何を書いてもOKです。


unsigned char  byte; /* 1 byte */
unsigned short word; /* 2 byte */
unsigned long dword; /* 4 byte */

/* 満杯です。 */
byte = 0xFF;
word = 0xFFFF;
dword= 0xFFFFFFFF;
printf("満杯  : %u, %u, %u \n",byte,word,dword);

/* バグ! */
byte = 0x0100;
word = 0x010000;
dword= 0x0100000000;
printf("桁溢れ: %u, %u, %u \n\n",byte,word,dword);

今度は、unsigned というキーワードが頭に付いた変数です。 これは符号無し、つまり負の数を扱えない変数を表します。 何もつけないか、signedをつけると符号付き変数になり、負の数を扱えます。 また、short は short int、long は long int の略です。

さて、変数にはサイズというものがあります。 つまりこれ以上は入らない上限があるわけです。 char は 1バイト。short は 2 バイト。long は 4 バイトになります。 int は処理系に依存していますが、今は 4バイトが主流です。(MS-DOSの頃は2バイトが主流) char型に文字が使われるのが多い理由は、1文字表すのに1バイト必要だからです。

で、実際この中にどれくらいの数値がはいるかというと、 1バイトで 255(0xFF) まで、2バイトで 65535(0xFFFF) まで、4バイトで 4294967295(0xFFFFFFFF)までです。 これは unsigned の場合で、signedの場合は 半分の正の数と0と半分-1の負の数になります(例:128 〜 -127)。

ではこれ以上の数値が入るとどうなるか?というと桁が上がったと同時にあふれ出ていってしまいます。 具体的に言うと、容量1バイト(255まで)の変数に256を入れると0になってしまいます。 16進数なら255(0xFF)までの変数に256(0x100)を入れると、下2桁の0x00の部分が入って0になると言うことが分かると思います。 これはバグの原因になるので、十分注意しておいた方がいいです。

又、int型などに小数を代入すると、小数点以下は切り捨てられるので注意。 小数点は必ず float(4バイト) か double(6バイト) に入れるようにしましょう。 逆にこれらに整数を入れると、その数値があまりにも大きければ、たとえ容量を溢れていなくても変な値になります。 これは、小数と整数では表現方法が根本的に違うからです。(signedとunsignedも微妙に違います)

Download 今回のソースDownload


★TOP★

Copyright(C) へぽぽ