编译器警告(等级 3)C4334

运算符:32 位移位的结果已隐式转换为 64 位(64 位移位是预期行为吗?)

32 位移位的结果已转换为 64 位,编译器怀疑 64 位移位是预期行为。 使用 64 位移位解决此警告。 如果有意进行 32 位移位,则将 Shift 结果强制转换为 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
}