Difficulty: Medium
Correct Answer: 2 and 4
Explanation:
Introduction / Context:
This question reinforces the difference between arithmetic, shift, and bitwise XOR operators in Java, and highlights that ^
is XOR, not exponentiation. It asks which proposed expressions evaluate to the same result when applied to the integer 16.
Given Data / Assumptions:
>>
is arithmetic right shift; >>>
is logical right shift.^
performs bitwise XOR, not power.
Concept / Approach:
Right-shifting 16 by 2 gives 16 / 2^2
in the power sense, but since ^
is XOR, writing 16/2^2
is actually (16/2) ^ 2
by precedence, and since 2 ^ 2 == 0
, the expression 16/0
is a constant-expression division by zero which is illegal at compile time. Meanwhile, 16 >> 2
and 16 >>> 2
both yield 4 for a nonnegative integer.
Step-by-Step Solution:
Verification / Alternative check:
Evaluating on a REPL confirms both right-shift variants produce 4 for nonnegative inputs. For negative values, >>
and >>>
differ.
Why Other Options Are Wrong:
Common Pitfalls:
Misreading ^
as exponent; in Java, there is no exponent operator—use Math.pow
for powers.
Final Answer:
2 and 4
Discussion & Comments