Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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_Binary_Bit Manipulation_Bitwise Operators_Integer Overflow - Fatal编程技术网

Ruby 如何左旋转整数的位

Ruby 如何左旋转整数的位,ruby,binary,bit-manipulation,bitwise-operators,integer-overflow,Ruby,Binary,Bit Manipulation,Bitwise Operators,Integer Overflow,我需要在Ruby中将一个整数的32位向左旋转n。我正在尝试使用规范实现: 类整数 def rotl32 n 返回self>32-n 终止 终止 使用大数字时出现了一些问题:结果溢出了32位。我猜这是因为Ruby中整数的理论无限大 如何做到不溢出?Ruby将自动切换到不同的内部表示,以适应更大的数字,因此您需要使用掩蔽来覆盖它: class Integer def rotl32(n) mask = (1 << (32 - n)) - 1 ((self &

我需要在Ruby中将一个整数的32位向左旋转n。我正在尝试使用规范实现:

类整数 def rotl32 n 返回self>32-n 终止 终止 使用大数字时出现了一些问题:结果溢出了32位。我猜这是因为Ruby中整数的理论无限大


如何做到不溢出?

Ruby将自动切换到不同的内部表示,以适应更大的数字,因此您需要使用掩蔽来覆盖它:

class Integer
  def rotl32(n)
    mask = (1 << (32 - n)) - 1

    ((self & mask) << n) | (self >> (32 - n))
  end
end
当掩码指示哪些位应该向左移位时,其余的位在移位前被有效地修剪掉


Ruby会很乐意做一些非常荒谬的事情,比如1Ruby会自动切换到不同的内部表示,以适应更大的数字,因此您需要使用掩蔽:

class Integer
  def rotl32(n)
    mask = (1 << (32 - n)) - 1

    ((self & mask) << n) | (self >> (32 - n))
  end
end
当掩码指示哪些位应该向左移位时,其余的位在移位前被有效地修剪掉


Ruby会很乐意做一些非常荒谬的事情,比如1无需在标题中添加Ruby::;这就是标签的作用。你可以用粗体或斜体字写东西,但只有在真正必要的时候才这样做。强调用来引起对某事的额外注意。如果几乎所有的事情都需要额外的关注,那么没有什么会得到额外的关注。会有帮助的。无需在标题中添加Ruby::;这就是标签的作用。你可以用粗体或斜体字写东西,但只有在真正必要的时候才这样做。强调用来引起对某事的额外注意。如果几乎所有的事情都需要额外的关注,那么没有什么会得到额外的关注。会有帮助的。