法大奥山研究室

 previous  contents

6. 型変換(Conversion)


 代入式自体,値をもつことを見ました。ということは,代入式自体,型をもつはずです。何故ならば,C言語では,扱うデータのすべてがそれ固有の型をもつからです。仕様(C99)によると,

となっています。そこで疑問になるのが,異なる型の間の代入は,どのような変換が行われるかです。というのは「4.5. 変数のサイズ」で見たように,例えば,unsigned char255 までなのに対し,unsigned long int の最大値は 4294967295 ですから,unsigned long int型変数を unsigned char型へ代入すれば,値が収まらないことが起こりえます。

 実は,異なる型の間の変換は,予め決まったルールに従います。

■型変換(Conversion)

これらのルールは,単純代入演算子だけでなく,後に見る「キャスト演算子」も含め,ある型が他の型に変換されるときに適用されます。

/* Example 6.1 */

#include <stdio.h>

int main(void)
{
       int n = 500;
       unsigned char c = 0;

       c = n;
       printf("%u (%o, %x)\n", c, c, c);

       return 0;
}

この例は,int型変数を unsigned char型へ変換したものです。変換指定子 %uunsigned 用です。実行結果は次の通りです。

244 (364, f4)

unsigned char型の最大値は 255 なのでそれに 1 を足した 256 を 500 から引いた値となっています。


 previous  contents