Advertencia C6297

Desbordamiento aritmético: el valor de 32 bits se desplaza y, luego, se convierte a un valor de 64 bits. El resultado no puede ser un valor esperado

Comentarios

Esta advertencia indica un comportamiento incorrecto derivadas de reglas y tipos de promoción integrales mayores que aquellos en los que normalmente se usa la aritmética.

En este caso, se ha desplazado un valor de 32 bits a la izquierda y el resultado de ese desplazamiento se ha convertido a un valor de 64 bits. Si el desplazamiento ha desbordado el valor de 32 bits, se pierden bits.

Si no quiere perder bits, convierta el valor para desplazar a una cantidad de 64 bits antes de que se desplace. Si quiere perder bits, realice la conversión adecuada a unsigned long o a un tipo short. O bien, enmascara el resultado del desplazamiento. Cualquiera de estos enfoques elimina esta advertencia y hace que la intención del código sea más clara.

Nombre del análisis de código: RESULTOFSHIFTCASTTOLARGERSIZE

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 = static_cast<unsigned __int64>(i) << 34;
}

Consulte también

Advertencia del compilador (nivel 1) C4293