Java | 単項マイナス演算子

Java Java
スポンサーリンク

Javaの単項演算子をやさしく理解する

最初は「記号がいっぱいで難しそう…」と感じるかもしれません。けれど、単項演算子は「数値に1つだけ操作をする記号」です。動き方をひとつずつ、手で動かして確かめれば大丈夫。


単項演算子の基本

  • 意味: 値ひとつに対して使う演算子(+、-、++、– など)。
  • 目的: 数の符号を変えたり、1を足したり引いたりするシンプルな操作。

単項プラス(+)

  • 役割: 値をそのまま使う(実質何もしない)。
  • イメージ: 「その数でOK」の確認スタンプ。
int a = 10;
System.out.println(+a); // 10(そのまま)
Java
  • 使いどころ: 可読性のために明示したいとき以外、ほぼ使わない。

単項マイナス(-)

  • 役割: 符号を反転する(プラス⇄マイナス)。
  • イメージ: 数字の向きをひっくり返すスイッチ。
int a = 10;
System.out.println(-a); // -10

int b = -7;
System.out.println(-b); // 7(マイナスが反転してプラスに)
Java
  • ポイント: 計算の途中でも使える。
    例)int c = -(2 + 3); // -5

型に関する注意点(byte / short)

  • 自動拡張: byteshort+- を使うと、内部では int に一時的に広がる。
  • 代入時: そのまま代入するとエラーになる場合がある(キャストが必要)。
byte x = 5;
// byte y = -x; // コンパイルエラー(intに拡張されるため)
byte y = (byte)(-x); // キャストするとOK
Java
  • 初心者向け結論: まずは int を使うのがおすすめ。

インクリメント(++)とデクリメント(–)

前置(++a / –a)と後置(a++ / a–)の違い

  • 前置: 先に変化してから、その値を使う。
  • 後置: 今の値を使ってから、あとで変化する。
int a = 5;
System.out.println(++a); // 6(先に+1してから表示)
System.out.println(a);   // 6

int b = 5;
System.out.println(b++); // 5(今はそのまま表示、あとで+1)
System.out.println(b);   // 6(ここで増えている)
Java
  • 使いどころ: ループで数を数えるときに超便利。
for (int i = 0; i < 3; i++) {
    System.out.println(i); // 0, 1, 2
}
Java

つまずきやすい例と解説

例1: 足し算の中の単項マイナス

int a = 4;
int b = -(a + 3); // a+3 を計算してから符号を反転
System.out.println(b); // -7
Java
  • 理解ポイント: カッコの中を先に計算して、最後に「-」でひっくり返す。

例2: 前置と後置の見分け

int a = 10;
int x = ++a; // aは11、xも11
int y = a++; // yは11(その時点のa)、aは12に増える
System.out.println(a); // 12
System.out.println(x); // 11
System.out.println(y); // 11
Java
  • 理解ポイント: 「前置=先に増える」「後置=あとで増える」。

例3: 配列インデックスと後置

int[] arr = {100, 200, 300};
int i = 0;

System.out.println(arr[i++]); // 100(先に使う → あとで i が 1 になる)
System.out.println(i);        // 1
System.out.println(arr[i]);   // 200
Java
  • 理解ポイント: 「使ってから増える」動きがわかるとミスが減る。

ミニ練習問題(手で動かして確認)

  1. 符号反転の基本int n = -12; int m = -n; System.out.println(m); // いくつ?
    • 答えのヒント: マイナスをひっくり返す。
  2. 前置と後置の違いint a = 3; int x = a++; // x は? int y = ++a; // y は? System.out.println(a); // 最終的な a は?
    • 考え方: 「後置はあとで」「前置は先に」。
  3. 式の中のマイナスint a = 2; int b = 3; int c = -(a * b) + ++a; // c は? System.out.println(a); // a は?
    • 順序: かけ算→符号反転→前置インクリメント→足し算。
  4. キャストの確認(応用)byte p = 120; byte q = (byte)(-p); System.out.println(q); // いくつ?(ヒント: 範囲に注意)
    • ヒント: byte は -128〜127。範囲外は丸められる。

使うときのコツ

  • 読みやすさ重視: 式が複雑になったら、途中の値を変数に分ける。
  • 前置/後置は最小限: 意図が伝わる書き方を優先(特に商用コードでは前置/後置の多用は避ける)。
  • まずは int: 型の罠にはまらないための安全策。

まとめ

  • 単項プラス: そのまま(ほぼ使わない)。
  • 単項マイナス: 符号反転。式の最後に「向きを変える」イメージ。
  • ++ / –: 前置は「先に変化」、後置は「あとで変化」。ループで大活躍。
  • 型の注意: byte/short は内部で int になる。迷ったら int を使う。
タイトルとURLをコピーしました