C6297
avertissement C6297 : Dépassement arithmétique : la valeur 32 bits est décalée, puis définie en cast à une valeur 64 bits. Le résultat peut être différent de la valeur attendue
Cet avertissement indique un comportement incorrect résultant des règles de promotion des intégraux et de types dont la taille est supérieure à celle des types dans lesquels des opérations arithmétiques se produisent.
Dans ce cas, une valeur de 32 bits a été déplacée vers la gauche, et le résultat de ce décalage a été casté sur une valeur 64 bits. Si le décalage a débordé la valeur 32 bits, les bits sont perdus.
Si vous ne souhaitez pas perdre des bits, castez la valeur pour qu'elle se décale d'une quantité de 64 bits avant qu'elle soit déplacée. Si vous souhaitez perdre des bits, effectuez le cast approprié sur un type long ou court non signé, ou masquez le résultat pour supprimer cet avertissement et rendre l'intention du code plus claire.
Exemple
Le code suivant génère cet avertissement :
void f(int i)
{
unsigned __int64 x;
x = i << 34;
// code
}
Pour corriger cet avertissement, utilisez le code suivant :
void f(int i)
{
unsigned __int64 x;
// code
x = ((unsigned __int64)i) << 34;
}