C言語ホーム > 型変換前ページ次ページ
サイト内検索:

C言語の型変換について

C言語の型変換について、暗黙の型変換(代入時および式内)と明示的な型変換について説明します。

暗黙の型変換

暗黙の型変換とは、コンパイラによって自動的に行われる型変換のことです。

<代入時の型変換>

変数を代入する式で、左辺の型と右辺の型が異なっている場合は、左辺の型に変換して代入します。この時、左辺の型が右辺の型より大きい場合は問題ありません。しかし、左辺の型が右辺の型より小さい場合は、情報の損失が発生します。

例えば、float型の値をint型の変数に代入すると小数部が切り捨てられます。

大きな整数をより小さい整数やchar型の変数に型変換する場合は、余分な上位ビットが捨てられます。



<式内の型変換>

式の中で異なる型の変数等が現れたときは、精度の高い方の型にあわせます。具体的には、以下の手順で変換されます。

  1. いずれかの被演算数がlong doubleならば、他方もlong doubleに変換する。
  2. 上記以外で、片方の被演算数がdoubleならば、他方もdoubleに変換する。
  3. 上記以外で、片方の被演算数がfloatならば、他方もfloatに変換する。
  4. 上記以外ならば、両方の被演算数に対して整数への格上げを行い、以下の手順を実行する。
  5. 片方の被演算数がunsigned long intならば、他方もunsigned long intに変換する。
  6. 上記以外で、片方の被演算数がlong intで、他方がunsigned intの場合は、long intがunsigned intの全ての値を表現できるかに依存する。それが可能な場合は、unsigned intの被演算数をlong intに変換する。そうでなければ、両方をunsigned long intに変換する。
  7. 上記以外で、片方の被演算数がlong intならば、他方もlong intに変換する。
  8. 上記以外で、片方の被演算数がunsigned intならば、他方もunsigned intに変換する。
  9. 上記以外ならば、両方の被演算数はint型を持つ。

明示的な型変換

明示的な型変換とは、キャストによって明示的に型を指定して行う型変換のことです。値の前に括弧で括ったデータ型を記述し、型を強制的に変換します。


(型名)式;

例を見てみましょう。

<明示的な型変換の例>

#include <stdio.h>

int main(int argc, char *argv[])
{
	int a = 2, b = 3;
	double x = 0.0;

	x = a / b;
	printf("%f¥n", x);

	x = (double)a / b;
	printf("%f¥n", x);

	return 0;
}

このサンプルソースの実行結果は以下になります。

0.000000
0.666667

明示的な型変換を行わないとa / bの実行(整数の割り算)で小数点以下が切り捨てられます。一方、aをdouble型にキャストしてからa / bを計算すると、小数点以下が切り捨てられることなく計算されます。

C言語ホーム > 型変換前ページ次ページ
© 2009 C言語サイト管理人