算術演算子(剰余演算子 % と負数の符号規則)難易度 標準無料
次のコードの出力として正しいものを選べ。
1 public class Q2 {
2 public static void main(String[] args) {
3 int a = -7 % 3;
4 int b = 7 % -3;
5 System.out.println(a + " " + b);
6 }
7 }
- A
-1 1 - B
2 -2 - C
-1 -2 - D
ArithmeticExceptionがスローされる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
Java の剰余演算子 % の結果の符号は左辺(被除数)の符号と一致する。これは (a / b) * b + (a % b) == a という恒等式から導かれる(/ がゼロ方向への切り捨てであることと整合する)。
-7 % 3:-7 / 3はゼロ方向切り捨てで-2。-2 * 3 = -6。-7 - (-6) = -1→ -1。7 % -3:7 / -3はゼロ方向切り捨てで-2。-2 * -3 = 6。7 - 6 = 1→ 1。
よって a=-1, b=1、出力は -1 1。
- B剰余の符号を除数(右辺)に合わせて考えた誤り。Java の
%の符号は被除数(左辺)の符号に従う。 - C
7 % -3の符号を左辺7(正)に合わせず右辺の符号に引っ張られた誤り。正しくは被除数が正なので結果も正の1。 - D
%が例外を投げるのは除数が0のときだけ。ここでの除数は3・-3でありゼロ除算ではない。
ひっかけ: 「剰余の符号は除数(右辺)に従う」という誤解が多い。実際は被除数(左辺)の符号に従う。
-7 % 3 が正の 2 になる、というのは誤り。コマンド例と想定される挙動(未実行)
出力: -1 1
公式ドキュメント・関連JLS SE11 §15.17.3 Remainder Operator %↗
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)