Ruby 如何左旋转整数的位
我需要在Ruby中将一个整数的32位向左旋转n。我正在尝试使用规范实现: 类整数 def rotl32 n 返回self>32-n 终止 终止 使用大数字时出现了一些问题:结果溢出了32位。我猜这是因为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将自动切换到不同的内部表示,以适应更大的数字,因此您需要使用掩蔽来覆盖它:
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::;这就是标签的作用。你可以用粗体或斜体字写东西,但只有在真正必要的时候才这样做。强调用来引起对某事的额外注意。如果几乎所有的事情都需要额外的关注,那么没有什么会得到额外的关注。会有帮助的。