Поделиться через


Предупреждение компилятора (уровень 3) C4334

Оператор: результат 32-разрядной смены неявно преобразован в 64 бита (предназначен 64-разрядный сдвиг?)

Результат 32-разрядной смены был преобразован в 64-разрядную, и компилятор подозревает, что 64-разрядная смена была предназначена. Устраните это предупреждение с помощью 64-разрядной смены. Если 32-разрядная смена является намеренной, приведение результата смены к 32-разрядному, чтобы сделать его понятным компилятору.

Пример

Следующий пример приводит к возникновению ошибки 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
}