无符号整型左移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 上平台上验证后没有复现搜索出来的结果,如果在看的各位朋友手中存在测试环境的话,可以帮着验证一下。

posted on 2025-10-26 19:57  小樊童鞋  阅读(0)  评论(0)    收藏  举报