結果の値も同じ型となる
C言語の場合の値の扱いについての補足です。
int型同士の演算結果はint型となる。従って、
code:sametype01.c
int main(void){
float x;
x = 3/2; /* (1) */
printf("%f\n", x);
return 0;
}
3/2なので結果は1.5になることが予想されるが、小数部が切り捨てられ整数の1が結果として返される。
float型の変数に代入しようとも、浮動小数を意味する書式指定子%fで出力しようとも、結果の値は「1」となる。
次のように小数点を加えた記述は明示的にfloat型であることを意味する。これはint型とfloat型の間での演算となり、結果の値は浮動小数型となる。
code:sametype02.c
int main(void){
float x;
x = 3/2.; /* (1) */
printf("%f\n", x);
return 0;
}
興味があったのでデータサイズで確認してみた。
intとfloatは4バイト長、doubleは8バイト長である。
code:sametype03.c
int main(void){
int x = 2;
float y = 2.;
double z = 2.;
printf("%d\n", (int)(sizeof(3/x)));
printf("%d\n", (int)(sizeof(3/y)));
printf("%d\n", (int)(sizeof(3/z)));
return 0;
}