<本章の目的>整数の四則演算と剰余計算プログラムを習得する。
結論を先に言ってしまえばC言語、C++言語のそれにクリソツ(笑)!
●問題2-1 加減乗除を行うプログラムを作って下さい。
○答え
public class Calc1{
public static void main(String[] args){
System.out.println("3+2="+(3+2)+"です。");
System.out.println("5-8="+(5-8)+"です。");
System.out.println("3*4="+(3*4)+"です。");
System.out.println("7/3="+(7/3)+"です。");
}
}
○実行結果
D:\atsushi\Java\List2-1>java Calc1
3+2=5です。
5-8=-3です。
3*4=12です。
7/3=2です。
-- Press any key to exit (Input "c" to continue) --
○解説
println メソッドは、C言語の printf 関数より、C++言語の cout に近いようで。
数値のまま表示させることは出来ないので、数値は自動的に文字列に変換されます。
+ 演算子は文字列の連結も行います。
数値を挟む括弧は必ずしも必要ではありません(補足参照)。
7/3=2 となっている実行結果に注目!
○補足
"3+2="+3+2 → 3+2=32
"5-8="+5-8 → コンパイルエラー
"3*4="+3*4 → 3*4=12
"7/3="+7/3 → 7/3=2
○補足2
0 で割った場合はどうなるでしょうか?
//プログラム
public class Calc1{
public static void main(String[] args){
System.out.println("3+2="+(3+2)+"です。");
System.out.println("5-8="+(5-8)+"です。");
System.out.println("3*4="+(3*4)+"です。");
System.out.println("7/3="+(7/3)+"です。");
System.out.println("1/0="+(1/0)+"です。");
}
}
//コンパイル
■D:\atsushi\Java\List2-1> javac Calc1.java
[CPad: コンパイル終了]
//実行結果
D:\atsushi\Java\List2-1>java Calc1
3+2=5です。
5-8=-3です。
3*4=12です。
7/3=2です。
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Calc1.main(Calc1.java:7)
-- Press any key to exit (Input "c" to continue) --
●問題2-2 1+2×3−4÷2 を計算するプログラムを作って下さい。
○答え
public class Calc2{
public static void main(String[] args){
System.out.println(1+2*3-4/2);
}
}
○実行結果
D:\atsushi\Java\List2-2>java Calc2
5
-- Press any key to exit (Input "c" to continue) --
○解説
演算子の優先順位は「演算子と優先順位」をご覧あれ。
同じ優先度の場合、代入演算子は右結合、その他は左結合。
●問題2-3 剰余の計算を行うプログラムを作って下さい。
○答え
public class Calc3{
public static void main(String[] args){
System.out.println("20%7="+20%7);
}
}
○実行結果
D:\atsushi\Java\p44>java Calc3
20%7=6
-- Press any key to exit (Input "c" to continue) --
○解説
C言語、C++言語と一緒。
●問題2-4 -10000*10000 を int 型と long 型の両方で計算するプログラムを作って下さい。
○答え
public class CalcBig{
public static void main(String[] args){
System.out.println(-100000*100000);
System.out.println(-100000*100000L);
}
}
○実行結果
D:\atsushi\Java\List2-3>java CalcBig
-1410065408
-10000000000
-- Press any key to exit (Input "c" to continue) --
○解説
int 型は符号付き32ビット整数です。
したがって、-100000*100000 を計算するとオーバーフローを起こします。
long 型は符号付き64ビット(!)整数なので、オーバーフローを起こしません。
long 型として扱う場合は整数の末尾に L あるいは l (小文字のエル) を付けるだけです。
答えでは片方にしか L を付けていないにもかかわらず、
正しい実行結果が得られたということは、暗黙の型変換が行われているということになりますね。
★整数型一覧
型名 | 最小値 | 最大値 | 解説 |
byte | -128 | 127 | 符号付き8ビット |
short | -32768 | 32767 | 符号付き16ビット |
int | -2147483648 | 2147483647 | 符号付き32ビット |
long | -9223372036854775808 | 9223372036854775807 | 符号付き64ビット |
char | 0 | 65535 | 符号無し16ビット |
C言語やC++言語のそれとは微妙に違うようで。
処理系によって詳細が異なるのかどうかは不明。
また、型指定子 signed と unsind の存在は確認できず。
個人的には long 型が64ビットなのには驚いた!