今までは「=」を使った代入演算が行われる時の型変換について見てきました。ここでは「+」や「*」など2つの値を対象とした二項演算の際の型変換ルールについて確認します。型変換は次の規則に従います。(1)から(3)に該当しない場合は両方の値をint型に変換するこの規則は(1)から順に適用され、いずれかに適用されればその後の変換は行われません。double型とlong型の値の演算では、long型の値がdouble型に変換されて演算が行われます。次の例を見てください。l;上記ではdouble型の変数「d」とlong型の変数「l」が「*」演算子によって演算さえる際、まずlong型の変数「l」がdouble型に変換された後で演算が行われます。l」はdoule型となりその後で「=」演算子によって左辺の変数「val」に代入されます。l;複数の演算子が組み合わされた場合も演算子の優先順位に従って順に演算が行われます。l」が行われますが演算が行われる前に変数「i」がlong型に変換されます。l」はlong型の値となります。l」の結果がdouble型に変換されます。l」はdouble型の値となります。int型への変換に伴う注意点double型、float型、long型に該当しない値は全てint型に変換されてから演算が行われます。short型とshort型の演算を行う場合もどちらの値もいったんint型に変換されてから演算が行われると言う事です。次の例を見てください。s2;一見するとshort型とshort型の値を演算した結果をshort型の変数に代入しているので問題無いように見えますが、コンパイルすると「精度が落ちている可能性」というコンパイルエラーが表示されます。これは演算子の対象の値がどちらもdouble型、float型、long型に該当しませんので、演算が行われる前にどちらの値もint型に変換されてから演算が行われます。s2」はint型の値となります。int型の値をshort型の値に代入する場合はキャスト演算子が必要となるためコンパイルエラーが発生します。正しくは次のように記述する必要があります。s2);なぜエラーとなっているか分かりにくい箇所なので注意して下さい。単項マイナス演算子を使うことで符号を反転することができます。(詳しくは「単項マイナス演算子」を参照して下さい)。-n1;ただしbyte型、short型、char型に対して単項マイナス演算子を使用する時は注意が必要です。byte型、short型、char型の場合には符号を反転させる前に対象の値をint型へ自動的に型変換するためです。その為、次のような記述を行うとコンパイル時に「精度が落ちている可能性」というコンパイルエラーが表示されます。-s1;これは単項マイナス演算子によって「s1」がint型へ変換され、結果的に「-s1」がint型の値になっているためです。int型の値をshort型の値に代入する場合はキャスト演算子が必要となります。正しくは次のように記述する必要があります。(short)-s1;これも分かりにくいエラーが発生するところなので注意して下さい。サンプルでは簡単な例で試しておきます。}}コンパイル後に実行すると次のように表示されます。IKURA初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を多数行っています。