Partilhar via


C6297

aviso C6297: Estouro aritmético: o valor de 32 bits é deslocado e então convertido para um valor de 64 bits.O resultado não pode ser um valor esperado

Esse aviso indica o comportamento incorreto que os resultados da promoção integrante de regras e digite maior do que aquelas em aritmética que é executada normalmente.

Nesse caso, um valor de 32 bits foi deslocamento à esquerda, e o resultado dessa turno foi convertido em um valor de 64 bits.Se o turno estourou o valor de 32 bits, os bits são perdidos.

Se você não deseja perder bit, converta o valor a ser compensado a uma quantidade de 64 bits antes de ser deslocada.Se você deseja perder os bits, executar a conversão apropriada ao longo não assinados ou um tipo curto, ou mascare o resultado do turno eliminarão esse aviso e retornarão a tentativa de código mais espaço livre.

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

Aviso do compilador (nível 1) C4293