演算子の優先順位
下表は優先順位が高い順
1 | ++ , -- | +1,-1 | インクリメント演算子 a++ → aに1を加える デクリメント演算子 a-- → aから1を引く |
2 | * , / , % | ×,÷,余り | 算術演算子 7*2→14 , 7/2→3 , 7%2→1 7+2→9 , 7-2→5 |
+ , - | +,- | ||
3 | <> , <= , >= | 大小比較 | 関係演算子 a>=0→aが0以上ならtrue |
== , != | 等しいか | 関係演算子 a==b→aとbが等しければtrue |
|
4 | && , || | かつ,または | 論理演算子 (a>=0)&&(b>=0) aが0以上かつbが0以上ならばtrue |
5 | = | 代入 | 代入演算子 a = b → bをaに代入 |
+= , -=,*= , /= , %= | 複合代入 | 複合代入演算子 a + = → a=a+bと同じ |
※関係演算子・論理演算子の結果は必ずteueかfalseが返されます。
以下に実行時のコードを記載します。
package test;
public class sample {
public static void main(String[] args) {
// 使用する変数の定義
int a = 8, b = 2; // 変数の宣言
// 普通の演算による計算と代入
System.out.println("a + b = " + (a + b));
System.out.println("a - b = " + (a - b));
System.out.println("a * b = " + (a * b));
System.out.println("a / b = " + (a / b));
System.out.println("a % b = " + (a % b));
System.out.println("a >= b = " + (a >= b));
System.out.println("(a >= 0) && (b >= 3):" + ((a >= 0) && (b >= 3)));
System.out.println("(a >= 0) || (b >= 3):" + ((a >= 0) || (b >= 3)));
// 代入演算による計算
System.out.println("代入演算による計算");
System.out.println("a += b = " + (a += b));
System.out.println("a -= b = " + (a -= b));
System.out.println("a *= b = " + (a *= b));
System.out.println("a /= b = " + (a /= b));
System.out.println("a %= b = " + (a %= b));
}
}
計算結果
a + b = 10
a - b = 6
a * b = 16
a / b = 4
a % b = 0
a >= b = true
(a >= 0) && (b >= 3):false
(a >= 0) || (b >= 3):true
代入演算による計算
a += b = 10
a -= b = 8
a *= b = 16
a /= b = 8
a %= b = 0
コンソールから入力した値を受け取って計算する場合は、
「変数の宣言」の個所に以下のように記述します。
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
「変数の宣言」の個所に以下のように記述します。
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
基本データ型の型変換とキャスト
キャストなしの型変換
数値同士の演算や代入をする際、表現できる値の幅が小→大の場合は自動的に変換されるので、キャストの明示は不要です。
キャストを明示した型変換
数値同士の演算や代入をする際、表現できる値の幅が大→小の場合キャストで明示します。
例えば32bitのものは64bitで表現できますが、32bitのものを64bitでそのまま表現することできませんので、キャストが必要になります。
double→float
long→int→short→byte
整数 | byte | 8ビット |
short | 16ビット | |
int | 32ビット | |
long | 64ビット | |
小数 | float | 32ビット |
double | 64ビット |
以下は、floatからlongへ型変換可能か試したコードと結果です。
使用するとすれば、doubleからintへの型変換で使うのでしょうが、興味本位で試してみました。
package test;
public class Sample {
public static void main(String[] args){
int price = Integer.parseInt(args[0]);
float rate = 0.08f; // 消費税率:8%
long amount;
amount = (long)(price * (1 + rate));
System.out.println("税込金額:" + amount + "円");
}
}
コンソールから1980と入力した出力結果型変換は可能でした。
税込金額:2138円