コンパイラの警告 (レベル 3) C4334

'operator': 32 ビットシフトの結果が暗黙的に 64 ビットに変換されました (64 ビットシフトが意図されていましたか?

32 ビット シフトの結果は 64 ビットに変換され、コンパイラは 64 ビットシフトが意図されたと見なします。 64 ビット シフトを使用して、この警告を解決します。 32 ビットシフトが意図的な場合は、シフト結果を 32 ビットにキャストしてコンパイラに明確にします。

次の例では C4334 警告が生成されます。

// C4334.cpp
// compile with: /W3 /c
void SetBit(unsigned __int64 *p, int i) {
   *p |= (1 << i); // C4334, 32-bit shift cast to 64-bit
   *p |= (1i64 << i); // OK, 64-bit shift
   *p |= static_cast<int>(1 << i); // OK, 32-bit shift saved to 64-bit result
   *p |= static_cast<__int64>(1) << i; // OK, 64-bit shift
}