Bagikan melalui


Compiler Warning (level 3) C4334

'operator': hasil shift 32-bit secara implisit dikonversi menjadi 64 bit (ditujukan untuk shift 64-bit?)

Hasil pergeseran 32-bit dikonversi menjadi 64-bit, dan kompilator mencurigai bahwa shift 64-bit dimaksudkan. Atasi peringatan ini dengan menggunakan shift 64-bit. Jika pergeseran 32-bit disengaja, maka transmisikan hasil pergeseran ke 32-bit untuk memperjelas ke pengkompilasi.

Contoh

Sampel berikut menghasilkan 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
}