<STEP1>
データ型の変換をするための演算子をキャスト演算子といいます。
double d = 10 / 3;
double型の変数dを、10÷3の値で初期化するとします。
ユーザは、3.33333...という値が入って欲しいと思うと思いますが、dに入る値は、「3」となります。
なぜでしょうか?
右辺を見ると、 整数 / 整数 を実行しているので、値としては整数の値が評価されます。
したがって、右辺で評価された 10 / 3 = 3 の値がdに代入されるため、3.00000という値が入力されるわけです。
ここで、活躍できるのがキャスト演算子です。
double d;
int n1 = 10;
int n2 = 3;
d = n1 / n2; //3.000000が表示される
d = (double)n1 / (double)n2; //3.333333が表示される
int型のn1の値を、
(double)n1
というように、変数の前に「(変換したい型)」をつければ値の型の変換(キャスト)ができます。
<STEP2>
型の優先順位
int n1 = 10;
double d1 = 3;
double d;
d = n1 / d1;
dの値はどうなるでしょうか?
この場合、n1は整数、d1は小数ですので、d1の方が多くのバリエーションの数を表すことができると考ることができます。
したがって、n1が暗黙的にdouble型にキャストされて、右辺の式の評価がdouble型になります。
<STEP3>
型の優先順位
double型とint型だと、小数と整数のため、小数の方が型が優位になるというのはイメージしやすいと思います。
同じ整数型だとしても、型の優劣が存在します。
short型(2byte) << int型(4byte) << long型(4byte) << long long型(8byte)
※環境によって異なりますが、研修PCのセントOS上では、このような関係になっています。
このように、表せる数の大きさに優劣があるため、同じ整数同士で計算した場合でも、小さな型が暗黙的に大きな型の方にキャストされます。
【演習】
小数型の型の優劣関係を式に表しなさい。