Share via


Upozornění kompilátoru (úroveň 3) C4334

"operator": výsledek 32bitového posunu implicitně převeden na 64 bitů (byl zamýšlen 64bitový posun?)

Výsledek 32bitového posunu byl převeden na 64bitovou verzi a kompilátor má podezření, že byl zamýšlen 64bitový posun. Vyřešte toto upozornění pomocí 64bitového posunu. Pokud je 32bitový posun úmyslný, přetypujte výsledek posunu na 32bitovou verzi, aby bylo jasné kompilátoru.

Příklad

Následující ukázka vygeneruje 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
}