C6297C6297

avertissement C6297 : dépassement de capacité arithmétique : valeur 32 bits est décalée, puis effectuer un cast en valeur 64 bits.warning C6297: Arithmetic overflow: 32-bit value is shifted, then cast to 64-bit value. Résultat ne peut pas être une valeur attendueResult may not be an expected value

Cet avertissement indique un comportement incorrect résultant de règles de promotion intégrale et types supérieurs à ceux dans lesquels arithmétique est généralement effectuée.This warning indicates incorrect behavior that results from integral promotion rules and types larger than those in which arithmetic is typically performed.

Dans ce cas, une valeur 32 bits a été déplacée vers la gauche, et le résultat de ce décalage a été converti en une valeur 64 bits.In this case, a 32-bit value was shifted left, and the result of that shift was cast to a 64-bit value. Si l’équipe a dépassé la valeur 32 bits, les bits sont perdus.If the shift overflowed the 32-bit value, bits are lost.

Si vous ne souhaitez pas perdre des bits, effectuez un cast de la valeur de décalage pour une quantité de 64 bits avant qu’elle soit déplacée.If you do not want to lose bits, cast the value to be shifted to a 64-bit quantity before it is shifted. Si vous souhaitez perdre des bits, effectue le cast approprié en non signé long ou un type court ou le résultat de l’équipe de masquage supprimer cet avertissement et que l’objectif du code plus clair.If you want to lose bits, performing the appropriate cast to unsigned long or a short type, or masking the result of the shift will eliminate this warning and make the intent of the code more clear.

ExempleExample

Le code suivant génère cet avertissement :The following code generates this warning:

void f(int i)  
{  
  unsigned __int64 x;  

  x = i << 34;  
  // code   
}  

Pour corriger cet avertissement, utilisez le code suivant :To correct this warning, use the following code:

void f(int i)  
{  
  unsigned __int64 x;  
  // code  
  x = ((unsigned __int64)i) << 34;  
}  

Voir aussiSee Also

Avertissement du compilateur (niveau 1) C4293Compiler Warning (level 1) C4293