What is the result of number when it is left shifted by -1
in C programming using the left shift operator?
e.g.:
23 << -1
What is the result of number when it is left shifted by -1
in C programming using the left shift operator?
e.g.:
23 << -1
From the C11 standard 6.5.7p3 (for former versions it is basically the same):
"If the value of the right operand is negative or is greater than or equal to the width of the promoted left operand, the behavior is undefined."
IOW: undefined behaviour. Prepare for nasal demons.
Briefly: Do not
Caution: While many programmers are aware of that and avoid negative shift counts, it is often ignored that also counts >=
the bit-size of the value are also undefined. This makes something like ((unsigned int)1 << 32) - 1
actually undefined if unsigned int
has 32 bits or less. For signed values things become more complicated due to the sign (thanks @chux for pointing me at that). This is a common pitfall. For some implementations, different results for constant expressions (compile-time evaluated) and run-time evaluation might occur.
As Olaf said in his answer, left shifting by a negative number is undefined.
In fact, gcc will give a warning if you attempt shift in either direction by a negative number.
Bitwise Left Shift Operator in C:
Syntax:
**[variable]<<[number of places]**
If Number of Places become negative, it will be undefined