C6297
Aviso C6297: estouro aritmético: valor de 32 bits é deslocado, em seguida, converter para 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 é normalmente realizada.
Nesse caso, um valor de 32 bits foi deslocado para a esquerda e o resultado dessa mudança foi convertido para 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 que possam ser transferidos para uma quantidade de 64 bits antes de ele é deslocado.Se você quiser perder bits, executando 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 nítido.
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 código a seguir:
void f(int i)
{
unsigned __int64 x;
// code
x = ((unsigned __int64)i) << 34;
}