【发布时间】:2014-02-02 14:55:59
【问题描述】:
在将一些 DSP C++ 代码转换为 ObjectPascal 时,我看到很多有符号整数上的“>>”运算符(右操作数始终为 1 或 2)。我知道 C++ 在有符号整数上执行算术右移,而不是 Pascal 中的逻辑右移。
目前我正在用“div 2”或“div 4”命令来代替这些 ASR 转换。有没有更好或更通用的方法来处理这些问题?
【问题讨论】:
在将一些 DSP C++ 代码转换为 ObjectPascal 时,我看到很多有符号整数上的“>>”运算符(右操作数始终为 1 或 2)。我知道 C++ 在有符号整数上执行算术右移,而不是 Pascal 中的逻辑右移。
目前我正在用“div 2”或“div 4”命令来代替这些 ASR 转换。有没有更好或更通用的方法来处理这些问题?
【问题讨论】:
是的,假设左操作数是一个 32 位变量:
(x>>1)|0x80000000
(x>>2)|0xC0000000
如果你想要x>>N 的一般情况:
(x>>N)|(((1<<N)-1)<<(32-N))
【讨论】:
(x SHR 1) OR 0x80000000。谢谢。
shr、shr 和 or