Правило 12.2 MISRA C:2012

Правый операнд оператора сдвига должен лечь в нуле области значений меньше, чем ширина в битах существенного типа левого операнда

Описание

Управляйте определением

Правый операнд оператора сдвига должен лечь в нуле области значений меньше, чем ширина в битах существенного типа левого операнда.

Объяснение

Рассмотрите следующий оператор:

var = abc << num;
Если abc является 16-битным целым числом, то num должен быть в области значений 0–15, (неотрицательный и меньше чем 16). Если num отрицателен или больше, чем 16, то поведение сдвига не определено.

Реализация Polyspace

В Polyspace® числа, которыми управляют в предварительной обработке директив, 64 бита шириной. Допустимая область значений сдвига между 0 и 63. Когда битовые поля в сложном выражении, Polyspace расширяет эту проверку на ширину поля битового поля или ширину базового типа.

Обменивайтесь сообщениями в отчете

  • Сумма сдвига больше, чем size.

  • Сумма сдвига отрицательна.

  • Правильный операнд оператора сдвига должен лечь в нуле области значений меньше, чем ширина в битах существенного типа левого операнда.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Проверяйте информацию

Группа: Выражения
Категория: необходимый
Категория AGC: необходимый
Язык: C90, C99