ObjectPascal中算术右移的处理 在将一些C++ C++代码翻译成ObjectPascal时,我看到了一些有符号整数上的“>>”运算符(右边的操作数总是为1或2)。我知道,在符号整数上C++执行算术右移,而不是Pascal中的逻辑右移。

ObjectPascal中算术右移的处理 在将一些C++ C++代码翻译成ObjectPascal时,我看到了一些有符号整数上的“>>”运算符(右边的操作数总是为1或2)。我知道,在符号整数上C++执行算术右移,而不是Pascal中的逻辑右移。,c++,bit-shift,delphi,C++,Bit Shift,Delphi,目前,我正在用'div 2'或'div 4'命令替换这些ASR班次。是否有更好或更通用的方法来处理这些问题?是的,假设左操作数是32位变量: (x>>1)|0x80000000 (x>>2)|0xC0000000 如果您想了解x>>N的一般情况: (x>>N)|(((1<<N)-1)<<(32-N)) (x>>N)|((1我看,继续进行位运算,只需屏蔽以保留符号。因此在OP中,它将是(x SHR 1)或0x8000000。谢谢。注

目前,我正在用'div 2'或'div 4'命令替换这些ASR班次。是否有更好或更通用的方法来处理这些问题?

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

(x>>1)|0x80000000

(x>>2)|0xC0000000
如果您想了解
x>>N
的一般情况:

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

(x>>N)|((1我看,继续进行位运算,只需屏蔽以保留符号。因此在OP中,它将是
(x SHR 1)或0x8000000
。谢谢。注意,在Pascal中,它应该是
SHR
SHR