Home > Article > Backend Development > What Happens When Right Shift Count Exceeds Type Width in C ?
Undefined Behavior of Right Shift with Oversized Count
In C , the right shift operator (>>) performs a bitwise shift on the left operand, moving bits to the right by the number of positions specified by the right operand. However, there are certain cases where this operation may result in undefined behavior.
According to the C standard, the behavior of a right shift is undefined if the left operand has a signed type and a negative value. However, the question arises about the behavior when the right operand is greater than or equal to the width of the left operand.
The C standard states that the value of a right-shifted integer is the integral part of the quotient of the left operand divided by 2 to the power of the right operand. This implies that for unsigned types or non-negative signed types, the result should be zero when the right operand is larger than the left operand's bit width.
However, the example code provided reveals a discrepancy with the expected behavior, as GCC produces a non-zero result (67108863) and issues a warning about the right shift count being greater than the type width.
This suggests that the behavior in this case is not strictly defined by the C standard. Section 5.8 of the C standard states that "the behavior is undefined if the right operand... is greater than or equal to the length in bits of the promoted left operand." Since the type width of unsigned int is typically 32 bits or less, a right operand of 34 as in the example is undefined behavior.
Therefore, while the standard suggests a zero result in such cases, the actual behavior is implementation-defined, and GCC chooses to produce a non-zero result with a warning. This emphasizes the importance of ensuring that right shift operations with large counts are handled appropriately to avoid undefined behavior in C .
The above is the detailed content of What Happens When Right Shift Count Exceeds Type Width in C ?. For more information, please follow other related articles on the PHP Chinese website!