C6297

Actualización: noviembre 2007

C6297

Advertencia C6297: Desbordamiento aritmético: se desplaza el valor de 32 bits y, a continuación, se convierte en un valor de 64 bits. Puede que los resultados no tengan un valor esperado

Esta advertencia indica un comportamiento incorrecto que es el resultado de las reglas de promoción de enteros y de tipos mayores que aquéllos con los que se suelen realizar las operaciones aritméticas.

En este caso, se desplazó a la izquierda un valor de 32 bits y el resultado de ese cambio se convirtió a un valor de 64 bits. Si el cambio desborda el valor de 32 bits, se pierden bits.

Si no desea perder los bits, convierta el valor que se va a desplazar a una cantidad de 64 bits antes del desplazamiento. Si desea perder bits, realice la conversión apropiada a un tipo long o short sin signo, o bien enmascare el resultado del desplazamiento: de este modo, eliminará la advertencia y la intención del código queda más clara.

Ejemplo

El código siguiente genera esta advertencia:

void f(int i)
{
  unsigned __int64 x;

  x = i << 34;
  // code 
}

Para corregir esta advertencia, utilice el código siguiente:

void f(int i)
{
  unsigned __int64 x;
  // code
  x = ((unsigned __int64)i) << 34;
}

Vea también

Referencia

Advertencia del compilador (nivel 1) C4293