Partager via


Avertissement C6297

Dépassement arithmétique : la valeur 32 bits est décalée, puis converti en valeur 64 bits. Le résultat peut ne pas être une valeur attendue

Notes

Cet avertissement indique un comportement incorrect qui résulte de règles de promotion intégrales et de types supérieurs à ceux dans lesquels l’arithmétique est généralement effectuée.

Dans ce cas, une valeur 32 bits a été décalée vers la gauche et le résultat de ce décalage a été converti en valeur 64 bits. Si le décalage a dépassé la valeur 32 bits, les bits sont perdus.

Si vous ne souhaitez pas perdre de bits, convertissez la valeur pour passer à une quantité 64 bits avant qu’elle ne soit décalée. Si vous souhaitez perdre des bits, effectuez le cast approprié vers unsigned long ou un short type. Ou masquez le résultat du décalage. L’une ou l’autre approche élimine cet avertissement et rend l’intention du code plus claire.

Nom de l’analyse du code : RESULTOFSHIFTCASTTOLARGERSIZE

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

Voir aussi

Avertissement du compilateur (niveau 1) C4293