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