Javaをはじめよう!第17回~算術昇格~
2016/05/09
はじめに
前回はchar型の変換規則についてご紹介いたしました。
今回は算術昇格について詳しくご紹介いたします。
演算子
算術昇格
二項算術演算の解は、拡大変換が適用されます。拡大変換とは、byte型、short型、char型を演算する場合に、その値が、int型に変換されてから演算され、解もint型で表される事を言います。
浮動小数点型の場合はfloat型がdouble型に変換されてから演算され、解はdouble型で表されます。
それでは、実際のソースを見てみましょう。
Sample28.java
[code]
package chap02;
public class Sample28 {
public static void main(String[] args){
int i =10;
byte b =20;
byte b2 = 30;
System.out.println( i+b);
System.out.println(b +b2);
double d = 12.3;
System.out.println(i +d);
}
}
[/code]
実行例
50
22.3
System.out.println();で表示をする時は、int型やdouble型で表示をしても何も問題ありません。
また、int型とdouble型を演算した時の解が、double型になっている事に注目してください。これは、int型がdouble型に型変換されてから計算されるためです。
二項算術演算を行うと算術昇格されるというのは分かって頂けるのではないでしょうか。
では、次に演算を行なった値をintやdoubleよりも、データ範囲が狭い範囲に代入するとどうなるでしょうか。ソースを見てみましょう。
Sample29.java
[code]
package chap02;
public class Sample29 {
public static void main(String[] args){
int i = 10;
byte b =20;
byte b2 =30;
int num = i + b;
short nums =b + b2;
System.out.println(num);
System.out.println(nums);
}
}
[/code]
型の不一致: int から short には変換できませんat chap02.Sample29.main(Sample29.java:10)
エラーの内容を確認すると、型の不一致intからshortに変換できない、という内容が表示されています。演算子を利用する場合は注意が必要です。
int型で演算をしてから、キャスト演算でdouble型に変換してみましょう。次のプログラムの結果がどうなるか予想してみてください。
Sample30.java
[code]
package chap02;
class Sample30{
public static void main(String[] args){
int i1 = 5;
int i2 = 2;
//int型の5/2をしてからdouble型に型変換しています。
double d = (double)(i1/ i2);
System.out.println(d);
}
}
[/code]
どうでしょうか。5/2をdouble型で表示すると、『2.5』と表示されるはずが、結果は『2.0』になってしまいました。
これは、int型のiとi2で計算し、解としてint型の2が求められてからdouble型に型変換されたためです。
さいごに
今回は、算術昇格について詳しく紹介いたしました!
次回は三項演算について詳しく紹介いたします!