Condividi tramite


Avviso del compilatore (livello 3) C4334

'operator': risultato dello spostamento a 32 bit convertito in modo implicito in 64 bit (è previsto uno spostamento a 64 bit?)

Il risultato dello spostamento a 32 bit è stato convertito in 64 bit e il compilatore sospetta che fosse previsto uno spostamento a 64 bit. Risolvere questo avviso usando uno spostamento a 64 bit. Se uno spostamento a 32 bit è intenzionale, eseguire il cast del risultato dello spostamento a 32 bit per renderlo chiaro al compilatore.

Esempio

L'esempio seguente genera l'errore 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
}