Предупреждение C26453

Арифметический переполнение: левое изменение отрицательного подписанного числа не определено (io.4)

Замечания

Это предупреждение указывает, что код слева сдвигает отрицательное целочисленное значение со знаком, которое является несовместимым и активирует определенное поведение реализации.

Имя анализа кода: LEFTSHIFT_NEGATIVE_SIGNED_NUMBER

Пример

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

  // code
}

Чтобы исправить это предупреждение, используйте следующий код:

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

  // code
}

См. также

26450
26451
26452
26454
ES.101. Использование неподписанных типов для обработки битовых операций
ES.102: используйте подписанные типы для арифметики