【问题标题】:Handling Arithmetic Right Shifts in ObjectPascal在 ObjectPascal 中处理算术右移
【发布时间】:2014-02-02 14:55:59
【问题描述】:

在将一些 DSP C++ 代码转换为 ObjectPascal 时,我看到很多有符号整数上的“>>”运算符(右操作数始终为 1 或 2)。我知道 C++ 在有符号整数上执行算术右移,而不是 Pascal 中的逻辑右移。

目前我正在用“div 2”或“div 4”命令来代替这些 ASR 转换。有没有更好或更通用的方法来处理这些问题?

【问题讨论】:

    标签: c++ bit-shift delphi


    【解决方案1】:

    是的,假设左操作数是一个 32 位变量:

    (x>>1)|0x80000000
    
    (x>>2)|0xC0000000
    

    如果你想要x>>N 的一般情况:

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

    【讨论】:

    • 我明白了,保留位操作,只是掩码保留符号。所以在 OP 中是(x SHR 1) OR 0x80000000。谢谢。
    • 请注意,在 Pascal 中它应该是 shr、shr 和 or
    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2013-10-30
    相关资源
    最近更新 更多