I'm referring to this article specifically this part
Oversized Shift Amounts: Shifting a uint32_t by 32 or more bits is undefined. My guess is that this originated because the underlying shift operations on various CPUs do different things with this: for example, X86 truncates 32-bit shift amount to 5 bits (so a shift by 32-bits is the same as a shift by 0-bits), but PowerPC truncates 32-bit shift amounts to 6 bits (so a shift by 32 produces zero). Because of these hardware differences, the behavior is completely undefined by C (thus shifting by 32-bits on PowerPC could format your hard drive, it is not guaranteed to produce zero). The cost of eliminating this undefined behavior is that the compiler would have to emit an extra operation (like an 'and') for variable shifts, which would make them twice as expensive on common CPUs.
What are those 5 bits and 6 bits?
The quote alleges, close enough to accurately* that the hardware operations to shift by
n:n & 31places (i.e. whatever the value is of the low five bits ofn); whereasn & 63places (i.e. the value of the low six bits ofn).* the original 8086 doesn't actually do this, if memory serves. It'll just keep going until it has shifted by a single bit,
ntimes, whatevernmight be. But it's also a 45-year-old real-mode-only 16-bit processor so you probably weren't going to target it.