Операнд правой руки оператора сдвига должен находиться в диапазоне от нуля до единицы меньше ширины в битах существенного типа операнда левой руки
Операнд правой руки оператора сдвига должен находиться в диапазоне от нуля до единицы меньше ширины в битах существенного типа операнда левой руки.
Рассмотрим следующее утверждение:
var = abc << num;
abc является 16-битным целым числом, то num должен находиться в диапазоне 0-15, (неотрицательный и менее 16). Если num отрицательный или больше 16, то поведение сдвига не определено.Polyspace ® вызывает нарушение, когда правильный операнд оператора смены превышает диапазон, определенный в этом правиле. Если правильный операнд является переменной, нарушение поднимается, если только все возможные значения операнда не остаются в пределах диапазона, определенного в этом правиле.
В Polyspace числа, которыми манипулируют в директивах предварительной обработки, имеют ширину 64 бита. Допустимый диапазон сдвига находится в диапазоне от 0 до 63. Когда битовые поля находятся в пределах сложного выражения, Polyspace расширяет эту проверку на ширину битового поля или ширину базового типа.
Сумма смены больше size.
Сумма сдвига отрицательна.
Правый операнд оператора сдвига должен находиться в диапазоне от нуля до единицы меньше ширины в битах существенного типа левого операнда.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Выражения |
| Категория: Обязательно |
| Категория СМЖЛ: требуется |