Java | 単項マイナス演算子

Java Java
スポンサーリンク

ここでは、「単項マイナス演算子(-)」の使いどころ・よくある間違い・練習問題(解答・解説付き)をすべてセットでわかりやすく説明します。
初心者が「なんとなく」から「しっかり使いこなせる」にレベルアップできる内容です。


単項マイナス演算子(-)とは?

値の「符号(プラス/マイナス)」を反転する演算子です。

入力出力
+5-5
-88
00

使いどころ(いつ使うの?)

① 数学的な符号反転が必要なとき

例)プラスの値をマイナスにして引き算に使うなど。

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 では byteshort の計算は一度 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
Java

3. 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

👉 結果は?

解答:コンパイルエラー
解説-bint に変換されるため 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 の扱い

次に進むなら:
👉 「インクリメント・デクリメント演算子(++、–)」の解説に進むと、単項演算子の理解がより深まります。

タイトルとURLをコピーしました