C6297
Aviso C6297: Estouro aritmético: o valor de 32 bits é deslocado, converter o valor de 64 bits. Resultado não pode ser um valor esperado
Este aviso indica um comportamento incorreto que resulta da regras de promoção integral e tipos maiores do que aqueles em que a aritmética geralmente é executada.
Nesse caso, um valor de 32 bits foi deslocado para a esquerda e o resultado dessa mudança foi convertido em um valor de 64 bits. Se a mudança estourou o valor de 32 bits, os bits são perdidas.
Se não quiser perder bits, converta o valor de deslocamento para uma quantidade de 64 bits antes de ele é deslocado. Se você deseja perder bits, executar a conversão apropriada para unsigned long ou de um tipo de curto ou o resultado do turno de mascaramento será eliminar esse aviso e tornar a intenção do código mais claro.
Exemplo
O código a seguir gera este aviso:
void f(int i)
{
unsigned __int64 x;
x = i << 34;
// code
}
Para corrigir esse aviso, use o seguinte código:
void f(int i)
{
unsigned __int64 x;
// code
x = ((unsigned __int64)i) << 34;
}