<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上では、このような関係になっています。

このように、表せる数の大きさに優劣があるため、同じ整数同士で計算した場合でも、小さな型が暗黙的に大きな型の方にキャストされます。

 

【演習】

小数型の型の優劣関係を式に表しなさい。