在将一些DSP C ++代码翻译成ObjectPascal时,我看到了很多">>"有符号整数的运算符(右操作数始终为1或2)。我知道在有符号整数上,C ++执行算术右移而不是Pascal中的逻辑右移。
目前我正在替换' div 2'或者' div 4'这些ASR转变的命令。是否有更好或更一般的方法来处理这些?
答案 0 :(得分:3)
是的,假设左操作数是32位变量:
(x>>1)|0x80000000
(x>>2)|0xC0000000
如果你想要x>>N
的一般情况:
(x>>N)|(((1<<N)-1)<<(32-N))