Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的位移位_Ruby_Vb.net_Bit Shift - Fatal编程技术网

Ruby中的位移位

Ruby中的位移位,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) 如果设置了

我目前正在将一个VisualBasic应用程序转换为Ruby,因为我们正在将它转移到web上。然而,当转换一些算法时,我遇到了一个关于位移位的问题

我的理解是,问题在于VB对整数类型强制的大小掩码(如前所述)。实际上,Ruby在这些类型上没有区别

所以问题是:

Visual Basic
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