Udostępnij za pośrednictwem


Ostrzeżenie C26452

Przepełnienie arytmetyczne: liczba zmian w lewo jest ujemna lub większa lub równa rozmiarowi operandu, który jest niezdefiniowanym zachowaniem (io.3)

Uwagi

To ostrzeżenie wskazuje, że liczba zmian jest ujemna lub większa lub równa liczbie bitów w przesuniętym operandzie. Każda wielkość liter powoduje niezdefiniowane zachowanie.

Ostrzeżenie C4293 jest podobnym sprawdzeniem w kompilatorze Microsoft C++.

Nazwa analizy kodu: SHIFT_COUNT_NEGATIVE_OR_TOO_BIG

Przykład

unsigned long long combine(unsigned lo, unsigned hi)
{
  return (hi << 32) | lo; // C26252 here
}

Aby poprawić to ostrzeżenie, użyj następującego kodu:

unsigned long long combine(unsigned lo, unsigned hi)
{
  return (static_cast<unsigned __int64>(hi) << 32) | lo; // OK
}

Zobacz też

26450
26451
26453
26454
ES.101: Używanie typów niepodpisanych do manipulowania bitami
ES.102: Używanie typów podpisanych do arytmetyki