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