다음을 통해 공유


경고 C6297

산술 오버플로: 32비트 값이 이동된 다음, 64비트 값으로 캐스팅됩니다. 결과가 예상 값이 아닐 수 있습니다.

설명

이 경고는 일반적으로 산술 연산이 수행되는 규칙보다 큰 정수 승격 규칙 및 형식에서 발생하는 잘못된 동작을 나타냅니다.

이 경우 32비트 값이 왼쪽으로 이동되고 해당 시프트 결과가 64비트 값으로 캐스팅되었습니다. 시프트가 32비트 값을 오버플로하면 비트가 손실됩니다.

비트를 손실하지 않으려면 전환하기 전에 값을 64비트 수량으로 이동하도록 캐스팅합니다. 비트를 잃으려면 적절한 캐스트를 unsigned long 수행하거나 형식을 short 수행합니다. 또는 시프트 결과를 마스킹합니다. 두 방법 중 하나를 사용하면 이 경고가 제거되고 코드의 의도가 더 명확해집니다.

코드 분석 이름: RESULTOFSHIFTCASTTOLARGERSIZE

예시

다음 코드는 이 경고를 생성합니다.

void f(int i)
{
  unsigned __int64 x;

  x = i << 34;
  // code
}

이 경고를 수정하려면 다음 코드를 사용합니다.

void f(int i)
{
  unsigned __int64 x;
  // code
  x = static_cast<unsigned __int64>(i) << 34;
}

참고 항목

컴파일러 경고(수준 1) C4293