単項マイナス演算子 練習問題10問
ここでは、Javaの「単項マイナス演算子(-)」に関する練習問題を10問まとめます。
初心者がつまずきやすいところをカバーしつつ、符号反転・型変換・特例(Integer.MIN_VALUEなど)をしっかり理解できる構成になっています。
(各問題のあとに解答・解説があります)
【問題1】 基本の符号反転
int a = 5;
System.out.println(-a);
Java出力結果は?
✅ 解答:
-5
💬 解説:-a は「a の符号を反転する」という意味。
5 → -5 に変わる。
【問題2】 負の数を反転
int x = -8;
System.out.println(-x);
Java✅ 解答:
8
💬 解説:-(-8) なので、符号が2回反転し、正の8になります。
【問題3】 単項プラス(何もしない)
int n = 10;
System.out.println(+n);
Java✅ 解答:
10
💬 解説:
単項プラス(+)は符号をそのままにします。
実質的に意味はありませんが、「正の値である」ことを強調したいときなどに使えます。
【問題4】 型変換に注意(byte)
byte b = 3;
byte result = -b; // コンパイル通る?
Java✅ 解答:
コンパイルエラー
💬 解説:
Javaでは byte に - を付けると自動的に int に昇格します。
そのため、int → byte の代入でエラー。
正しくは:
byte result = (byte)-b;
Java【問題5】 オーバーフローの例
int v = Integer.MIN_VALUE;
System.out.println(-v);
Java✅ 解答:
-2147483648
💬 解説:int の最小値 -2147483648 を反転すると、+2147483648 になりますが、int の最大値は 2147483647。
範囲を超えるためオーバーフローし、結果的に同じ値が出ます。
【問題6】 char型にマイナスを使う
char c = 'A';
System.out.println(-c);
Java✅ 解答:
-65
💬 解説:'A' は Unicode コードで 65。- をつけると数値扱いになり、符号が反転して -65 となります。
【問題7】 浮動小数点(double)に使う
double d = -3.5;
System.out.println(-d);
Java✅ 解答:
3.5
💬 解説:-(-3.5) なので符号が反転して正の3.5になります。
整数でも小数でも同じ動き。
【問題8】 -0.0 の特例
double z = -0.0;
System.out.println(1.0 / z);
Java✅ 解答:
-Infinity
💬 解説:
浮動小数点では -0.0 が存在し、符号が区別されます。
0.0 と比較すると z == 0.0 は true ですが、除算では符号が影響して -Infinity になります。
【問題9】 boolean に使うと?
boolean flag = true;
System.out.println(-flag);
Java✅ 解答:
コンパイルエラー
💬 解説:boolean は数値ではないため、- は使えません。
論理反転には !flag を使います。
System.out.println(!flag); // false
Java【問題10】 式中での優先順位
int a = 2;
int b = 3;
System.out.println(-a * b);
Java✅ 解答:
-6
💬 解説:-a * b は (-a) * b と同じ。- が先に適用されて (-2) * 3 = -6。
まとめ:単項マイナスのポイント表
| 項目 | 内容 |
|---|---|
| 意味 | 符号を反転する(プラス ↔ マイナス) |
| 対象 | 数値型(int, double, char など) |
| 使えない型 | boolean |
| 注意点① | byte/short は int に昇格する(キャスト必要) |
| 注意点② | Integer.MIN_VALUE はオーバーフローする |
| 注意点③ | 浮動小数点の -0.0 に注意 |
| 計算順序 | 単項演算子は優先順位が高い(-a * b は (-a) * b) |
練習のコツ
- まずは
int型で符号反転を練習。 - 次に
byteやchar、doubleに応用してみる。 System.out.println()で結果を実際に確かめる。- 「なぜそうなるのか?」を必ず説明できるようにする。
次のステップとして、
➡ 「インクリメント/デクリメント演算子(++, --)」
も同じ「単項演算子」仲間なので、続けて学ぶと理解が深まります。
