-logical-signed-right-shift)Укажите, как обрабатывать бит знака для логических сдвигов вправо для подписанных переменных
Выбор между арифметическим и логическим сдвигом для операций правого сдвига над отрицательными значениями.
Этот параметр не изменяет выражения времени компиляции. Дополнительные сведения см. в разделе Ограничение.
Пользовательский интерфейс (только для настольных ПК): в конфигурации проекта этот параметр находится в узле Target & Compiler.
файл командной строки и параметров: Использовать параметр -logical-signed-right-shift. См. раздел Сведения о командной строке.
В стандарте C99 (sec 6.5.7) указано, что для операции правой смены x1>>x2, если x1 имеет знак и отрицательные значения, поведение определяется реализацией. Различные компиляторы выбирают между арифметическим и логическим сдвигом. Используйте этот параметр для эмуляции компилятора.
По умолчанию:
Arithmetical
ArithmeticalБит знака остается:
(-4) >> 1 = -2 (-7) >> 1 = -4 7 >> 1 = 3
Logical0 заменяет бит знака:
(-4) >> 1 = (-4U) >> 1 = 2147483646 (-7) >> 1 = (-7U) >> 1 = 2147483644 7 >> 1 = 3
В выражениях времени компиляции этот параметр Polyspace ® не изменяет стандартное поведение для правых сдвигов.
Например, рассмотрим это правильное выражение сдвига:
int arr[ ((-4) >> 20) ];
(-4) >> 20 оценивается во время компиляции. Логически это выражение эквивалентно 4095. Однако арифметически результат равен -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 |