Avertissement du compilateur (niveau 3) C4334

'operator' : résultat d’un décalage de 32 bits implicitement converti en 64 bits (était prévu pour un décalage de 64 bits ?)

Le résultat d’un décalage 32 bits a été converti en 64 bits, et le compilateur soupçonne qu’un décalage 64 bits a été prévu. Résolvez cet avertissement à l’aide d’un décalage 64 bits. Si un décalage 32 bits est intentionnel, convertissez le résultat de décalage sur 32 bits pour le rendre clair au compilateur.

Exemple

L’exemple suivant génère l’erreur C4334.

// C4334.cpp
// compile with: /W3 /c
void SetBit(unsigned __int64 *p, int i) {
   *p |= (1 << i); // C4334, 32-bit shift cast to 64-bit
   *p |= (1i64 << i); // OK, 64-bit shift
   *p |= static_cast<int>(1 << i); // OK, 32-bit shift saved to 64-bit result
   *p |= static_cast<__int64>(1) << i; // OK, 64-bit shift
}