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

Арифметический переполнение: число сдвигов влево отрицательно или больше или равно размеру операнда, которое является неопределенным поведением (io.3)

Замечания

Это предупреждение указывает, что число сдвигов отрицательное или больше или равно количеству битов в смещенном операнде. Любой случай приводит к неопределенному поведению.

Предупреждение C4293 аналогично проверка в компиляторе Microsoft C++.

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

Пример

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

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

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

См. также

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