https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66552
--- Comment #11 from Li Jia He <helijia at gcc dot gnu.org> --- The reason is that it is the remainder of the nth power of 2. In x >> (n% 32), 32 is the fifth power of 2. The hexadecimal representation of 32 is 0x100. Taking the remainder of 0x100, the data range is 0 ~ 0xff. And the result is the same as x >> (n & 0xff).