コンパイラの警告 (レベル 1) C4293

'operator' : シフト数が負の値であるか、大きすぎます。定義されていない動作です

シフト数が負または大きすぎる場合、結果のイメージの動作は未定義になります。

解説

この問題を解決するために、最初のオペランドに対してキャストを使用して、結果の型のサイズに拡張することができます。

次の例では、C4293 を生成し、その修正方法を示しています。

// C4293.cpp
// compile with: /c /W1
unsigned __int64 combine (unsigned lo, unsigned hi)
{
   return (hi << 32) | lo;   // C4293

   // In C, try the following line instead:
   // return ( (unsigned __int64)hi << 32) | lo;
   // In C++, try this line instead:
   // return (static_cast<unsigned __int64>(hi) << 32) | lo;
}