Difficulty: Easy
Correct Answer: False
Explanation:
Introduction / Context:
This concept check addresses the common heuristic that a left shift by 1 “multiplies by 2.” While often true for non-overflowing unsigned arithmetic, it is not universally valid in C because of overflow and signedness concerns.
Given Data / Assumptions:
Concept / Approach:
For values where 2x fits in range and where the type is unsigned (or where behavior is defined), x << 1 equals x * 2. But if the shift discards significant bits (overflow) or if x is signed and the shift produces a negative or undefined state, the equivalence fails.
Step-by-Step Solution:
Consider unsigned 8-bit 200: 200 << 1 = 400 mod 256 = 144, not 400.Consider signed int near INT_MAX: shifting left by 1 can overflow → undefined behavior, not equal to 2x.Therefore, “always equivalent” is false.
Verification / Alternative check:
Compare x<<1 and x*2 across boundary cases in a small program for unsigned vs. signed types; you will observe differences at extremes.
Why Other Options Are Wrong:
True: ignores overflow and undefined behavior.
Common Pitfalls:
Overgeneralizing bit tricks; not distinguishing signed from unsigned; forgetting about modulo wrap for unsigned.
Final Answer:
False
Discussion & Comments