Обработка арифметических сдвигов вправо в ObjectPascal

При переводе некоторого кода DSP C ++ в ObjectPascal я вижу довольно много операторов «>>» на целых числах со знаком (правый операнд всегда равен 1 или 2). Я знаю, что для целых чисел со знаком C ++ выполняет арифметическое смещение вправо, а не логическое смещение вправо в Паскале.

В настоящее время я заменяю команды ‘div 2’ или ‘div 4’ для этих сдвигов ASR. Есть ли лучший или более общий способ справиться с этим?

1

Решение

Да, если предположить, что левый операнд является 32-битной переменной:

(x>>1)|0x80000000

(x>>2)|0xC0000000

И если вы хотите общий случай для x>>N:

(x>>N)|(((1<<N)-1)<<(32-N))
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]