C++中的移位问题

在以下C/C++代码中,为什么结果还是41,根本没变
unsigned int d=41;
d=(d<<32)>>32;
cout<<" 结果"<<d;
所用电脑是win10 64位系统,VS2015和DEV-C++结果都是这样。
移位操作中还有哪些是值得我们注意的?

阅读 2.7k
1 个回答

c++标准约定当位移右侧操作数等于左侧操作数的位的个数时,运算会导致未定义行为。

5.8.1 The operands shall be of integral or unscoped enumeration type and integral promotions are performed. The type of the result is that of the promoted left operand. The behavior is undefined if the right operand is negative, or greater than or equal to the length in bits of the promoted left operand.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题