Compartilhar via


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

Consulte também

Referência

C4293 de aviso (nível 1) do compilador