Ostrzeżenie C26453

Przepełnienie arytmetyczne: lewe przesunięcie ujemnego numeru ze znakiem jest niezdefiniowane zachowanie (io.4)

Uwagi

To ostrzeżenie wskazuje, że lewy kod przenosi ujemną wartość całkowitą ze znakiem ujemnym, która jest niemożliwa do przeniesienia i wyzwala zdefiniowane zachowanie implementacji.

Nazwa analizy kodu: LEFTSHIFT_NEGATIVE_SIGNED_NUMBER

Przykład

void leftshift(int shiftCount)
{
  const auto result = -1 << shiftCount;  // C26453 reported here

  // code
}

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

void leftshift(int shiftCount)
{
  const auto result = ~0u << shiftCount; // OK

  // code
}

Zobacz też

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