Partilhar via


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;
}

Consulte também

Referência

Compilador C4293 de aviso (nível 1)