ホームページ  >  に質問  >  本文

C++中的移位问题

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

大家讲道理大家讲道理2764日前966

全員に返信(1)返信します

  • 怪我咯

    怪我咯2017-04-17 15:39:48

    C++ 標準では、ディスプレイスメントの右オペランドが左オペランドのビット数と等しい場合、その演算により未定義の動作が発生すると規定されています。

    5.8.1 オペランドは整数型または範囲外の列挙型でなければならず、整数の昇格が実行されます。右のオペランドが次の場合の動作は未定義です。負の値、またはプロモートされた左オペランドのビット長以上です。

    返事
    0
  • キャンセル返事