ここでは、「単項マイナス演算子(-)」の使いどころ・よくある間違い・練習問題(解答・解説付き)をすべてセットでわかりやすく説明します。
初心者が「なんとなく」から「しっかり使いこなせる」にレベルアップできる内容です。
単項マイナス演算子(-)とは?
値の「符号(プラス/マイナス)」を反転する演算子です。
| 入力 | 出力 |
|---|---|
+5 | -5 |
-8 | 8 |
0 | 0 |
使いどころ(いつ使うの?)
① 数学的な符号反転が必要なとき
例)プラスの値をマイナスにして引き算に使うなど。
int x = 10;
int y = -x; // y = -10
int result = 5 + y; // 5 + (-10) = -5
Java② 座標やベクトルなど「反対方向」を表すとき
ゲームや図形処理などで「反対向き」「逆方向」を表現できます。
int moveX = 3;
int moveY = -moveX; // 左右反転
Java③ 数学的な計算を見やすくする
式中で「負の数を明示する」ことで読みやすくします。
int result = 10 + (-3); // 10 - 3 と同じだが意図が明確
Javaよくある間違いと注意点
1. byte や short への代入でコンパイルエラー
byte a = 5;
byte b = -a; // エラー:int に変換されているため
Java💡 解決法
byte b = (byte)-a; // キャストが必要
🔎 理由:Java では byte や short の計算は一度 int に変換されるからです。
2. Integer.MIN_VALUE の符号反転が正しくならない
int n = Integer.MIN_VALUE;
System.out.println(-n); // 結果: -2147483648
Java💡 理由:int の最大値は 2147483647。符号反転すると範囲外になるためオーバーフローして同じ値が返ります。
💡 対策:long に変換してから反転。
long n = Integer.MIN_VALUE;
System.out.println(-n); // 2147483648
Java3. boolean に使おうとしてエラー
boolean flag = true;
System.out.println(-flag); // エラー!
Java💡 対策:論理反転は !flag を使います。
4. 計算順序を勘違いする
int a = 2;
int b = 3;
System.out.println(-a * b); // 結果は -6
Java💡 説明:-a * b は (-a) * b と同じ。符号反転が先に実行されます。
実践例(コードで理解)
public class UnaryMinusExample {
public static void main(String[] args) {
int score = 10;
System.out.println("score: " + score);
System.out.println("-score: " + (-score));
double height = -1.75;
System.out.println("-height: " + (-height)); // 正の1.75に反転
byte small = 5;
System.out.println("-(byte)small: " + (byte)-small); // キャスト必須
int min = Integer.MIN_VALUE;
System.out.println("-Integer.MIN_VALUE: " + (-min)); // そのまま
double zero = -0.0;
System.out.println("1.0 / zero: " + (1.0 / zero)); // -Infinity
}
}
Java出力結果:
score: 10
-score: -10
-height: 1.75
-(byte)small: -5
-Integer.MIN_VALUE: -2147483648
1.0 / zero: -Infinity
練習問題(10問)
【問題1】
int x = 7;
System.out.println(-x);
Java👉 出力は?
解答:-7
解説:7の符号を反転。
【問題2】
int a = -10;
System.out.println(-a);
Java👉 出力は?
解答:10
解説:負を反転して正になる。
【問題3】
byte b = 3;
byte c = -b;
Java👉 結果は?
解答:コンパイルエラー
解説:-b は int に変換されるため byte には代入できない。byte c = (byte)-b; に修正。
【問題4】
int n = Integer.MIN_VALUE;
System.out.println(-n);
Java👉 出力は?
解答:-2147483648
解説:範囲外のため反転しても変化しない(オーバーフロー)。
【問題5】
char ch = 'A';
System.out.println(-ch);
Java👉 出力は?
解答:-65
解説:'A' の Unicode 値は 65。- を付けると数値として扱われる。
【問題6】
double x = -0.0;
System.out.println(1.0 / x);
Java👉 出力は?
解答:-Infinity
解説:浮動小数点では -0.0 が存在し、除算で符号が反映される。
【問題7】
boolean flag = true;
System.out.println(-flag);
Java👉 結果は?
解答:コンパイルエラー
解説:boolean 型に単項マイナスは使えない。論理反転には !flag を使う。
【問題8】
int x = 2;
int y = 3;
System.out.println(-x * y);
Java👉 出力は?
解答:-6
解説:-x が先に評価されるため (-2) * 3 = -6。
【問題9】
int num = 5;
System.out.println(+num);
Java👉 出力は?
解答:5
解説:単項プラスは何もしない。
【問題10】
int a = 3;
int b = -a + (-2);
System.out.println(b);
Java👉 出力は?
解答:-5
解説:-a は -3、さらに + (-2) で合計 -5。
まとめ
| 覚えるポイント | 内容 |
|---|---|
| 🔹 意味 | 符号を反転させる(+ ⇄ -) |
| 🔹 対象 | 数値型(int, double, charなど) |
| 🔹 型変換 | byte/short は int に昇格する |
| 🔹 使えない型 | boolean |
| 🔹 注意点 | MIN_VALUE のオーバーフロー、-0.0 の扱い |
次に進むなら:
👉 「インクリメント・デクリメント演算子(++、–)」の解説に進むと、単項演算子の理解がより深まります。
