C6297

업데이트: 2007년 11월

C6297

경고 C6297: 산술 연산 오버플로가 발생했습니다. 32비트 값이 이동된 후 64비트 값으로 캐스팅되었습니다. 결과가 예상과 다를 수도 있습니다.

이 경고는 정수 계열 확장 규칙과 산술 연산에 사용된 형식이 해당 연산에 일반적으로 사용되는 형식보다 더 크기 때문에 발생하는 올바르지 않은 동작을 나타냅니다.

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

비트가 손실되지 않도록 하려면 시프트될 값을 시프트되기 전에 64비트로 캐스팅합니다. 비트가 손실되도록 두려면 부호 없는 long 또는 short 형식으로 적절한 캐스팅을 수행하거나, 시프트의 결과를 마스크하여 이 경고를 제거함으로써 코드에서 해당 비트를 없애려고 한다는 것을 명확하게 나타냅니다.

예제

다음 코드에서는 이 경고를 발생시킵니다.

void f(int i)
{
  unsigned __int64 x;

  x = i << 34;
  // code 
}

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

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

참고 항목

참조

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