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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de