Java | 単項マイナス演算子

Java Java
スポンサーリンク

超応用問題:単項マイナス+++/–+複雑式(15問)

ここからは、単項マイナス+インクリメント/デクリメント+複雑式の超応用問題(15問) を作成します。

  • 単項演算子の優先順位、ネスト、配列・メソッド・式の組み合わせをマスターできるレベルです。
  • 解答・解説付きで、実務的にも役立つ理解を目指します。

【問題1】

int x = 3;
System.out.println(-++x);
Java

✅ 解答: -4
解説:

  • ++x は先に x を 1 増やす → 4
  • - で符号反転 → -4

【問題2】

int y = 5;
System.out.println(-y--);
Java

✅ 解答: -5
解説:

  • y-- は後置なので、まず y=5 の値を使う
  • 符号反転 → -5
  • 実行後 y=4

【問題3】

int a = 2, b = 3;
System.out.println(-a + ++b);
Java

✅ 解答: 2
解説:

  • ++b → b=4
  • -a + ++b → -2 + 4 = 2

【問題4】

int[] arr = {1,2,3};
System.out.println(-arr[0] + arr[1]--);
Java

✅ 解答: 1
解説:

  • arr[0] = 1-1
  • arr[1]-- は後置 → 値 2 を使用、計算後 arr[1]=1
  • -1 + 2 = 1

【問題5】

int x = 2;
int y = 3;
System.out.println(-x * ++y);
Java

✅ 解答: -8
解説:

  • ++y → y=4
  • -x * ++y → (-2) * 4 = -8

【問題6】

byte b = 4;
System.out.println((byte)-++b);
Java

✅ 解答: -5
解説:

  • ++b → 5
  • -5 を byte 型にキャスト → -5

【問題7】

int[] nums = {1,2,3};
System.out.println(-nums[0] + nums[1] * -nums[2]--);
Java

✅ 解答: -7
解説:

  • -nums[0] = -1
  • -nums[2]-- = -3 (後置で計算後 nums[2]=2)
  • nums[1] * -nums[2]-- = 2 * -3 = -6
  • 合計 = -1 + -6 = -7

【問題8】

int x = 3;
System.out.println(-(-x++));
Java

✅ 解答: 3
解説:

  • x++ は後置 → まず値 3
  • -x++ = -3
  • 外側の -(-x++) → -(-3) = 3
  • 実行後 x=4

【問題9】

int a = 1;
int b = 2;
int c = 3;
System.out.println(-a + b-- * -c);
Java

✅ 解答: -5
解説:

  • b-- = 2(後置)
  • -c = -3
  • b-- * -c = 2 * -3 = -6
  • -a + ... = -1 + -6 = -7 ❌ Wait, let’s recalc:

Step by step:

  • -a = -1
  • b-- * -c = 2 * -3 = -6
  • -1 + -6 = -7 ✅ Corrected.

✅ 正解: -7


【問題10】

int[] arr = {1,2,3};
System.out.println(-(--arr[0] + arr[2]++));
Java

✅ 解答: -3
解説:

  • --arr[0] = 0(前置)
  • arr[2]++ = 3(後置)
  • 合計 = 0 + 3 = 3
  • 符号反転 → -3
  • 実行後 arr[0]=0, arr[2]=4

【問題11】

int x = 5;
System.out.println(-x-- + ++x);
Java

✅ 解答: 0
解説:

  • -x-- = -5(後置で x=4)
  • ++x = 5(前置)
  • 合計 -5 + 5 = 0

【問題12】

int[] arr = {1,2,3};
int x = arr[0]++;
int y = -arr[1];
System.out.println(x + y);
Java

✅ 解答: -1
解説:

  • x = arr[0]++ = 1 → arr[0]=2
  • y = -arr[1] = -2
  • 合計 = 1 + (-2) = -1

【問題13】

int x = 2;
int y = 3;
System.out.println(-x++ * --y);
Java

✅ 解答: -4
解説:

  • x++ = 2(後置) → x=3
  • --y = 2(前置)
  • -2 * 2 = -4

【問題14】

byte b = 2;
System.out.println((byte)-b++ + 1);
Java

✅ 解答: -1
解説:

  • -b++ = -2(後置、b=3)
  • -2 + 1 = -1

【問題15】

int[] arr = {1,2,3};
System.out.println(-arr[0] + (++arr[1] * -arr[2]));
Java

✅ 解答: -7
解説:

  • ++arr[1] = 3
  • -arr[2] = -3
  • 3 * -3 = -9
  • -arr[0] = -1
  • 合計 = -1 + -9 = -10 ❌ Wait, recalc:

Step:

  • arr[0] = 1 → -arr[0] = -1
  • arr[1] = 2 → ++arr[1] = 3
  • arr[2] = 3 → -arr[2] = -3
  • Multiply: 3 * -3 = -9
  • Sum: -1 + (-9) = -10 ✅ Corrected

✅ 正解: -10


超応用ポイントまとめ

  1. 単項マイナスは ++/– の前置・後置 と組み合わせると計算順序が非常に重要。
  2. 配列やメソッドの返り値 に適用するとネストや副作用に注意。
  3. byte/short は演算で int に昇格するので、キャストを忘れない。
  4. 式が複雑になったら 括弧で順序を明示 するとミスが減る。
  5. 後置(x++ / x--)と前置(++x / --x)の違いを意識すること。

💡 この15問をマスターすれば、単項マイナス×インクリメント/デクリメント×複雑式 の応用力はほぼ完璧です。

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