算術演算子(整数除算の切り捨て)難易度 標準無料
次のコードの出力として正しいものを選べ。
1 public class Q1 {
2 public static void main(String[] args) {
3 int a = 7 / 2;
4 int b = -7 / 2;
5 System.out.println(a + " " + b);
6 }
7 }
- A
3 -3 - B
3 -4 - C
3.5 -3.5 - Dコンパイルエラー(負の数を
int変数の除算に使えない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
int 同士の除算 / は小数点以下を切り捨てる(ゼロ方向へ丸める=truncation)。数学的な「切り下げ(floor)」ではない点に注意する。
7 / 2= 3.5 → ゼロ方向に切り捨てて 3。-7 / 2= -3.5 → ゼロ方向に切り捨てて -3(floor すると -4 になるがJavaはそうならない)。
したがって a=3, b=-3 となり、出力は 3 -3。
- B負数の除算を floor(負の無限大方向への切り捨て)だと誤解した答え。Java の整数除算はゼロ方向へ切り捨てるため
-7/2は-4ではなく-3。 - C
a・bはどちらもint型。int / intの結果は常にint(整数)になり、小数部は保持されない。 - D負の整数リテラルは通常の
int値であり、除算演算子/に何ら制約はない。コンパイルは問題なく通る。
ひっかけ: 負の数の除算を「floor(負の無限大方向への切り捨て)」だと誤解しやすい。Java の整数除算は常にゼロへ向かって切り捨てるので、
-7 / 2 は -4 ではなく -3。コマンド例と想定される挙動(未実行)
出力: 3 -3
公式ドキュメント・関連JLS SE11 §15.17 Multiplicative Operators↗
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)