다음을 통해 공유


컴파일러 경고(수준 3) C4334

'operator': 암시적으로 64비트로 변환된 32비트 시프트의 결과(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
}