Java | 単項マイナス演算子

Java Java
スポンサーリンク

単項マイナス演算子 練習問題10問

ここでは、Javaの「単項マイナス演算子(-)」に関する練習問題を10問まとめます。
初心者がつまずきやすいところをカバーしつつ、符号反転・型変換・特例(Integer.MIN_VALUEなど)をしっかり理解できる構成になっています。

(各問題のあとに解答・解説があります)


【問題1】 基本の符号反転

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

出力結果は?

✅ 解答:

-5

💬 解説:
-a は「a の符号を反転する」という意味。
5 → -5 に変わる。


【問題2】 負の数を反転

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

✅ 解答:

8

💬 解説:
-(-8) なので、符号が2回反転し、正の8になります。


【問題3】 単項プラス(何もしない)

int n = 10;
System.out.println(+n);
Java

✅ 解答:

10

💬 解説:
単項プラス(+)は符号をそのままにします。
実質的に意味はありませんが、「正の値である」ことを強調したいときなどに使えます。


【問題4】 型変換に注意(byte)

byte b = 3;
byte result = -b;  // コンパイル通る?
Java

✅ 解答:

コンパイルエラー

💬 解説:
Javaでは byte- を付けると自動的に int に昇格します。
そのため、intbyte の代入でエラー。
正しくは:

byte result = (byte)-b;
Java

【問題5】 オーバーフローの例

int v = Integer.MIN_VALUE;
System.out.println(-v);
Java

✅ 解答:

-2147483648

💬 解説:
int の最小値 -2147483648 を反転すると、+2147483648 になりますが、int の最大値は 2147483647。
範囲を超えるためオーバーフローし、結果的に同じ値が出ます。


【問題6】 char型にマイナスを使う

char c = 'A';
System.out.println(-c);
Java

✅ 解答:

-65

💬 解説:
'A' は Unicode コードで 65。
- をつけると数値扱いになり、符号が反転して -65 となります。


【問題7】 浮動小数点(double)に使う

double d = -3.5;
System.out.println(-d);
Java

✅ 解答:

3.5

💬 解説:
-(-3.5) なので符号が反転して正の3.5になります。
整数でも小数でも同じ動き。


【問題8】 -0.0 の特例

double z = -0.0;
System.out.println(1.0 / z);
Java

✅ 解答:

-Infinity

💬 解説:
浮動小数点では -0.0 が存在し、符号が区別されます。
0.0 と比較すると z == 0.0true ですが、除算では符号が影響して -Infinity になります。


【問題9】 boolean に使うと?

boolean flag = true;
System.out.println(-flag);
Java

✅ 解答:

コンパイルエラー

💬 解説:
boolean は数値ではないため、- は使えません。
論理反転には !flag を使います。

System.out.println(!flag); // false
Java

【問題10】 式中での優先順位

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

✅ 解答:

-6

💬 解説:
-a * b(-a) * b と同じ。
- が先に適用されて (-2) * 3 = -6


まとめ:単項マイナスのポイント表

項目内容
意味符号を反転する(プラス ↔ マイナス)
対象数値型(int, double, char など)
使えない型boolean
注意点①byte/short は int に昇格する(キャスト必要)
注意点②Integer.MIN_VALUE はオーバーフローする
注意点③浮動小数点の -0.0 に注意
計算順序単項演算子は優先順位が高い(-a * b(-a) * b

練習のコツ

  1. まずは int 型で符号反転を練習。
  2. 次に bytechardouble に応用してみる。
  3. System.out.println() で結果を実際に確かめる
  4. 「なぜそうなるのか?」を必ず説明できるようにする。

次のステップとして、
「インクリメント/デクリメント演算子(++, --)」
も同じ「単項演算子」仲間なので、続けて学ぶと理解が深まります。

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