LINUX.ORG.RU

Вопрос по левому битовому сдвигу и насыщению (saturation)

 ,


0

1

В общем, необходимо реализовать левый сдвиг с saturation на Си. Не спрашивайте зачем. вот отрывок из докуменатции

These operations are saturating (SAT). This means that if overflow occurs:
• the Q flag is set
• if the full result would be less than –2^31
, the result returned is –2^31
• if the full result would be greater than 2^31 – 1, the result returned is 2^31 – 1.

На сколько я помню у отрицательных чисел старшний бит 1? Я правильно помню? Тогда такое число 10100000 после сдвига станет положительным 01000000

Это считается переполненнием? Если да то в какую сторону? Спасибо за помощь.

upd: В частности нужно переписать на Си след асм инструкции QADD, QSUB, QDADD, QDSUB

★★★★★

Последнее исправление: Dudraug (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Решения нет, потому что я тупо затупил. Там мне нужен не сколько сдвиг, сколько умножение на два (по сути единичный сдвиг), или даже сложение двух чисел. По сути там простые проверки. 1) Если оба больше двух, а сумма изменила знак ->следовательно пересекли верхнюю гранть 2) тоже самое для отрицательных

Dudraug ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

xscale. Скорее всего нужные команды есть на этом арме, знаю. Но я же написал в ОП-посте, что лучше не спрашивать зачем это надо, это сложно объяснить, это очень странная прихоть, при чем не моя.

Dudraug ★★★★★
() автор топика

Тогда такое число 10100000 после сдвига станет положительным 01000000

Двоичный сдвиг к отрицательным числам это unspecified/undefined behaviour

anonymous
()
Ответ на: комментарий от anonymous

Да я уже понял. Переписываю чужой код, вот и вижу такое да.

Dudraug ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.