在以下C/C++代码中,为什么结果还是41,根本没变unsigned int d=41;d=(d<<32)>>32;cout<<" 结果"<<d;所用电脑是win10 64位系统,VS2015和DEV-C++结果都是这样。移位操作中还有哪些是值得我们注意的?
光阴似箭催人老,日月如移越少年。
C++ 標準では、ディスプレイスメントの右オペランドが左オペランドのビット数と等しい場合、その演算により未定義の動作が発生すると規定されています。
5.8.1 オペランドは整数型または範囲外の列挙型でなければならず、整数の昇格が実行されます。右のオペランドが次の場合の動作は未定義です。負の値、またはプロモートされた左オペランドのビット長以上です。
C++ 標準では、ディスプレイスメントの右オペランドが左オペランドのビット数と等しい場合、その演算により未定義の動作が発生すると規定されています。