我正在将Visual Basic应用程序转换为Ruby,因为我们正在将它转移到Web上。但是,当转换某些算法时,我遇到了有关位移的问题。
我是如何理解的,问题在于大小掩码VB对整数类型的强制执行(如Here所述)。实际上,Ruby并没有区分这些类型。
所以问题是:
Dim i As Integer = 182
WriteLine(i << 24) '-1241513984
puts 182 << 24 # 3053453312
我一直在谷歌搜索并阅读过去几个小时的位移,但没有找到解决这个问题的方法或方向。
答案 0 :(得分:8)
你需要复制visual basic正在做的事情,即
例如
def shift_32 x, shift_amount
shift_amount &= 0x1F
x <<= shift_amount
x &= 0xFFFFFFFF
if (x & (1<<31)).zero?
x
else
x - 2**32
end
end