C6297
Aviso C6297: Estouro aritmético: valor de 32 bit é deslocado e, em seguida, convertido em valor de 64 bit.Resultado não pode ser um valor esperado
Este aviso indica um comportamento incorreto que resultados da promoção integral regras e tipos maiores do que aqueles em que a aritmética geralmente é executada.
Nesse caso, um valor de 32 bit estava deslocar ed à esquerda e o resultado do que deslocar foi convertido para um valor de 64 bit.Se o deslocar estourou o valor de 32 bit, bit são perdidas.
Se você não quiser perder bit, converter o valor a ser alterados de uma quantidade de 64 bit antes de é deslocado.Se você deseja perder bits, executar a conversão apropriada para não assinado muito tempo ou um tipo de curto ou o resultado da mudança de mascaramento irá eliminar esse aviso e faça 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 seguinte código:
void f(int i)
{
unsigned __int64 x;
// code
x = ((unsigned __int64)i) << 34;
}