Ruby中的位移位
我目前正在将一个VisualBasic应用程序转换为Ruby,因为我们正在将它转移到web上。然而,当转换一些算法时,我遇到了一个关于位移位的问题 我的理解是,问题在于VB对整数类型强制的大小掩码(如前所述)。实际上,Ruby在这些类型上没有区别 所以问题是: Visual BasicRuby中的位移位,ruby,vb.net,bit-shift,Ruby,Vb.net,Bit Shift,我目前正在将一个VisualBasic应用程序转换为Ruby,因为我们正在将它转移到web上。然而,当转换一些算法时,我遇到了一个关于位移位的问题 我的理解是,问题在于VB对整数类型强制的大小掩码(如前所述)。实际上,Ruby在这些类型上没有区别 所以问题是: Visual Basic Dim i作为整数=182 WriteLine(i您需要复制visual basic的功能,即 根据记录屏蔽移位值 使用0xFFFFFF对结果进行cap掩码(因为ruby会将该值提升为bignum) 如果设置了
Dim i作为整数=182
WriteLine(i您需要复制visual basic的功能,即
- 根据记录屏蔽移位值
- 使用0xFFFFFF对结果进行cap掩码(因为ruby会将该值提升为bignum)
- 如果设置了最高位,则从结果中减去2^32(因为有符号整数是用
比如说
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
def移位量32 x移位量
移位量&=0x1F
x
puts 182 << 24 # 3053453312
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