无符号整型左移33位
首先使用了AI 问答来照看问题的答案
对于无符号整数左移33位的现象,实际上只会移动1位而不是33位,这是因为编译器会对移动位数进行取模运算。
具体来说,当移位位数超过该类型的最大位数时,编译器会对移动位数取模。对于32位整型(如int),实际移动位数是33%32=1位;对于64位整型(如long),实际移动位数则是移动次数和64的余数。
因此,无符号整数左移33位实际上等同于左移1位,即原数值乘以2。例如,若原数值为5(二进制0101),左移33位后的结果与左移1位相同,都是10(二进制1010)
win+vs2022 验证的结果
unsigned int a = 1;
a = (a >> 33);
std::cout << a << std::endl;
其输出结果如下:
# “>>”: Shift 计数为负或过大,其行为未定义 编译的时候报出了warning信息。
0
在windows 上平台上验证后没有复现搜索出来的结果,如果在看的各位朋友手中存在测试环境的话,可以帮着验证一下。
浙公网安备 33010602011771号