-logical-signed-right-shift
)Задайте, как лечить знаковый бит от логических сдвигов вправо на переменных со знаком
Выберите между арифметическим и логическим сдвигом для операций сдвига вправо на отрицательных величинах.
Эта опция не изменяет выражения времени компиляции. Для получения дополнительной информации смотрите Ограничение.
Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция находится на узле Target & Compiler.
Командная строка: Используйте опцию -logical-signed-right-shift
. Смотрите информацию о Командной строке.
Стандарт C99 (секунда 6.5.7) утверждает, что для операции x1>>x2
сдвига вправо, если x1
подписывается и имеет отрицательные величины, поведение задано реализацией. Различные компиляторы выбирают между арифметическим и логическим сдвигом. Используйте эту опцию, чтобы эмулировать ваш компилятор.
Значение по умолчанию:
Arithmetical
Arithmetical
Знаковый бит остается:
(-4) >> 1 = -2 (-7) >> 1 = -4 7 >> 1 = 3
Logical
0 замен знаковый бит:
(-4) >> 1 = (-4U) >> 1 = 2147483646 (-7) >> 1 = (-7U) >> 1 = 2147483644 7 >> 1 = 3
В выражениях времени компиляции эта опция Polyspace® не изменяет стандартное поведение для сдвигов вправо.
Например, рассмотрите это выражение сдвига вправо:
int arr[ ((-4) >> 20) ];
(-4) >> 20
выполнено во время компиляции. Логически, это выражение эквивалентно 4 095. Однако арифметически результат-1. Этот оператор вызывает ошибку компиляции (массивы не могут иметь отрицательного размера), потому что стандартное поведение сдвига вправо для целых чисел со знаком является арифметикой.При использовании командной строки арифметика является режимом вычисления по умолчанию. Когда эта опция установлена, логическое вычисление выполняется.
Параметр:
-logical-signed-right-shift |
Значение по умолчанию: Арифметика подписала сдвиги вправо |
Пример (средство поиска ошибки):
polyspace-bug-finder -logical-signed-right-shift |
Пример (программа автоматического доказательства кода):
polyspace-code-prover -logical-signed-right-shift |
Пример (сервер средства поиска ошибки): polyspace-bug-finder-server -logical-signed-right-shift |
Пример (сервер программы автоматического доказательства кода):
polyspace-code-prover-server -logical-signed-right-shift |