超応用問題:単項マイナス+++/–+複雑式(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→-1arr[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 = -3b-- * -c = 2 * -3 = -6-a + ... = -1 + -6 = -7❌ Wait, let’s recalc:
Step by step:
-a = -1b-- * -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]=2y = -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] = -33 * -3 = -9-arr[0] = -1- 合計 = -1 + -9 = -10 ❌ Wait, recalc:
Step:
arr[0] = 1→ -arr[0] = -1arr[1] = 2 → ++arr[1] = 3arr[2] = 3 → -arr[2] = -3- Multiply: 3 * -3 = -9
- Sum: -1 + (-9) = -10 ✅ Corrected
✅ 正解: -10
超応用ポイントまとめ
- 単項マイナスは ++/– の前置・後置 と組み合わせると計算順序が非常に重要。
- 配列やメソッドの返り値 に適用するとネストや副作用に注意。
- byte/short は演算で int に昇格するので、キャストを忘れない。
- 式が複雑になったら 括弧で順序を明示 するとミスが減る。
- 後置(
x++/x--)と前置(++x/--x)の違いを意識すること。
💡 この15問をマスターすれば、単項マイナス×インクリメント/デクリメント×複雑式 の応用力はほぼ完璧です。
