경고 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;
}
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기