コンパイラの警告 (レベル 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;
}