暗黙の型変換とは、コンパイラによって自動的に行われる型変換のことです。
C言語の型変換について、暗黙の型変換(代入時および式内)と明示的な型変換について説明します。
暗黙の型変換とは、コンパイラによって自動的に行われる型変換のことです。
変数を代入する式で、左辺の型と右辺の型が異なっている場合は、左辺の型に変換して代入します。この時、左辺の型が右辺の型より大きい場合は問題ありません。しかし、左辺の型が右辺の型より小さい場合は、情報の損失が発生します。
例えば、float型の値をint型の変数に代入すると小数部が切り捨てられます。
大きな整数をより小さい整数やchar型の変数に型変換する場合は、余分な上位ビットが捨てられます。
式の中で異なる型の変数等が現れたときは、精度の高い方の型にあわせます。具体的には、以下の手順で変換されます。
明示的な型変換とは、キャストによって明示的に型を指定して行う型変換のことです。値の前に括弧で括ったデータ型を記述し、型を強制的に変換します。
(型名)式;
例を見てみましょう。
#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を計算すると、小数点以下が切り捨てられることなく計算されます。