■C言語のデータ型■

C言語で使える定数の表現

C言語でプログラムを書くためには,とりあえず定数が書けないとはじまらない.C言語では次の表現で定数を書くことができる.

10進整数普通の数値86, 4
16進整数先頭に0x(ゼロエックス)か0X0x4c,0xD
8進整数先頭に0(ゼロ)062, 07
長整数(10進・16進・8進)末尾にl(エル)かL1234567890L,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言語の変数とは

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;  //実行文

}