C言語でプログラムを書くためには,とりあえず定数が書けないとはじまらない.C言語では次の表現で定数を書くことができる.
10進整数 | 普通の数値 | 86, 4 |
16進整数 | 先頭に0x(ゼロエックス)か0X | 0x4c,0xD |
8進整数 | 先頭に0(ゼロ) | 062, 07 |
長整数(10進・16進・8進) | 末尾にl(エル)かL | 1234567890L,0xffffffffL |
10進実数 | 小数点付き | 0.32, .12, 3. |
10進実数(指数付き) | eかEで10の何乗か示す指数表現 | 0.32e2,0.12E-3 |
文字定数 | 'で囲まれた一文字 | 'a', 'Z', '&' |
文字列定数 | "で囲まれた二文字以上の文字 | "xyz" |
指数表現とは,例えば0.32e2は,0.32×102を意味するように,10の何乗かをeの後の数字で表現する方法で ある.0.12E-3のようにeの後にマイナスの数である場合には,0.12/103を意味し,10の3乗で割った数を示す.
C言語のプログラムでは,これらの定数を次に説明する「変数」に格納して計算に使用するが,ある定数を格納できる変数は,同じ型でなければならない.例えば,整数の定数ならば同じ整数の型を持った変数でなければならない.
C言語では,プログラム中で計算の途中結果などの数値や文字などのデータを一時的に記憶するために「変数」を使用する.例えば次のように書けば,変数「x」に数値「8」を格納できる.
x = 8;
プログラムの中で計算式を書くときに,この変数を使用して式を書く.そうすることで,実際にプログラムを実行するときに変数に計算させたいデータを格納させることで,いろいろな数値データ同士の計算をさせることができる.
例えば,次の1番目の式は,「8 - 5」の計算しかできないが,2番目の式をプログラムすれば,xに格納しておくデータ次第で様々な計算に利用できる.
y = 8 - 5; z = x - 5;
C言語のプログラムは,このように変数を使った計算を中心に記述する.
C言語では,使用する変数をあらかじめ宣言文によってデータ型と名前を次のように定義する必要がある.
変数の型 変数の名前;
例えば次のようになる
int x;
複数の変数を一度に宣言することもできる.複数の名前をカンマ(,)でつなげればよい.
変数の型 変数の名前1, 変数の名前2, 変数の名前3;
例えば次のように書くと,四つとも「float」型の変数を一度に宣言できる.
float abc, xyx, f1, tmp;
型とは,変数に格納するデータの種類とサイズを示すもので,次のようなものがある.
変数のサイズは,コンパイラの種類や動作させるCPUの種類などによっていろいろに異なる.ここではM16C用のNC30で使われているものを示す.
型 | 種類 | サイズ |
---|---|---|
int | 整数 | 16bit(-32768から32767) |
short short int | 短整数 | 16bit |
long long int | 長整数 | 32bit |
float | 短精度実数 | 32bit(10進で9桁くらい) |
double | 倍精度実数 | 64bit(10進で17桁くらい) |
char | 文字 | 8bit(-128から127)まで |
charは文字型ではあるものの,実際にはASCIIコードと呼ぶ数値データで表現される.コンピュータは二進数しか扱えないため,文字も数値として表現しなくてはならないからである.例えば'a'という文字はASCIIコード表を参照すると,0x61(=97)という数値に対応している.その97という数字を,文字を扱うプログラムでは'a'として扱う約束になっている.
このようにコンピュータでは,実際には文字データも数値データの一種であるため,char型の変数を使って足し算引き算など,整数型の変数と同様に計算に利用することもできる.ただしそのサイズは8ビットであるため,大きな数は表現できない.
整数型・文字型・実数型などすべての通常変数は,符号も付けられるデータとして宣言される.つまり,マイナスのデータも表現できる.変数の最上位桁の1bitを符号ビットに割り当てているため,実際に表現できる数値の範囲は,上に示したサイズ-1ビットに納まる数である.例えば,char型の場合,8-1=7ビットで表現できる範囲で,すなわち0から127まで,符号も考えれば「-128から127」までとなる.
もしも符号なしの変数を使用したい場合には,次のように先頭に「unsigned」を付け加えて宣言すればよい.
unsigned int x;
符号無しの変数の場合,マイナスの数を表現できなくなる代わりに,符号ビットが存在せずサイズがそのまま数値表現に使えるため,例えばunsigned charならば8ビットの数をフルに表現できる.つまり0から255まで表現できるようになる.
intなどの整数型の場合には符号つきとなることがほ標準であることが定められているが,文字型に対してはコンパイラによって符号つきか符号なしかが異なる.本実験で使用するNC30では,文字型は符号なし(unsigned)となっている.符号つきの文字型を宣言する場合には,次のようにsignedと指定しなければならない.
sined char x;
実際のプログラムでは次のように使用される.
int main(void) { unsigned int i; //宣言文 float f; //宣言文 /* 宣言文ここまで, ここから実行文 */ i = 30; //実行文 f = i * 3.1415; //実行文 }
C言語では,C++やJavaとは異なり,宣言文は最初にまとめておかなければな らない.例えば次のように実行文を間にはさむことはできないので注意すること.
int main(void) { unsigned int i; //宣言文 i = 30; //実行文 float f; //宣言文 ※ここでエラーになる. f = i * 3.1415; //実行文 }