中級練習問題(応用10問)
ここでは、Javaの単項マイナス演算子(-)をさらに深く理解するための 中級練習問題(応用10問) を用意しました。
- 型変換、オーバーフロー、浮動小数点の特例、式中での優先順位などを扱います。
- 解答・解説付きでステップごとに理解できる構成です。
【問題1】 型変換の応用
byte b = 100;
short s = -b;
System.out.println(s);
Java✅ 解答:
コンパイルエラー
💬 解説:
-bはintに昇格するため、shortに直接代入できません。- 正しくは:
short s = (short)-b;
Java【問題2】 Integer.MIN_VALUE と絶対値
int min = Integer.MIN_VALUE;
System.out.println(Math.abs(min));
Java✅ 解答:
-2147483648
💬 解説:
Math.abs(Integer.MIN_VALUE)はオーバーフローで値が変わらず負のまま。intの範囲外のため +2147483648 にできません。
【問題3】 char の符号反転
char ch = 'Z';
int result = -ch + 10;
System.out.println(result);
Java✅ 解答:
-80
💬 解説:
'Z'の Unicode は 90。-ch + 10→-90 + 10 = -80
【問題4】 浮動小数点の符号反転
double x = 0.0;
double y = -x;
System.out.println(1.0 / y);
Java✅ 解答:
-Infinity
💬 解説:
-0.0がyに代入される。- 除算で符号が反映され、
1.0 / -0.0 = -Infinity。
【問題5】 式中での優先順位
int a = 5;
int b = 2;
int c = -a / b;
System.out.println(c);
Java✅ 解答:
-2
💬 解説:
- 単項マイナスは除算より優先される。
(-5) / 2 = -2(整数除算)
【問題6】 byte 型の複雑式
byte a = 10;
byte b = 3;
byte c = (byte)(-a + b);
System.out.println(c);
Java✅ 解答:
-7
💬 解説:
-aは int なのでキャスト必須。-10 + 3 = -7→(byte)で byte 型に戻す。
【問題7】 インクリメントと組み合わせ
int x = 3;
System.out.println(-++x);
Java✅ 解答:
-4
💬 解説:
++xは先に x を 1 増やす → 4- その後
-が適用され → -4
【問題8】 複雑な式
int a = 2;
int b = 3;
int c = 4;
System.out.println(-a + b * -c);
Java✅ 解答:
-14
💬 解説:
-a→ -2-c→ -4b * -c→ 3 * -4 = -12- 最後に
-a + b*-c→ -2 + (-12) = -14
【問題9】 小数と整数の組み合わせ
int a = 5;
double b = -2.5;
double result = -a + b;
System.out.println(result);
Java✅ 解答:
-7.5
💬 解説:
-a→ -5-5 + (-2.5)→ -7.5
【問題10】 マイナスと括弧の応用
int x = 2;
int y = 3;
int z = - (x + y);
System.out.println(z);
Java✅ 解答:
-5
💬 解説:
- 括弧内で先に
x + y = 5 - その後
-を適用 → -5
中級ポイントまとめ
| 項目 | 内容 |
|---|---|
| 型変換 | byte/short → int に自動昇格、再代入はキャスト必須 |
| MIN_VALUE | Integer.MIN_VALUE を反転するとオーバーフロー |
| char | 符号反転すると数値扱いになる |
| double | -0.0 の挙動に注意 |
| 式中の順序 | 単項マイナスは多くの演算より優先される |
| 複雑式 | 括弧で順序を明示すると理解しやすい |
💡 この10問をマスターすれば、単項マイナス演算子はほぼ完全に理解できます。
