旋转位在Ruby中的右操作
Ruby中有旋转位吗?
或者我该怎么办呢。
谢谢
一些事实:
- Ruby有运算符
<<
和>>
来移位,但没有内置的旋转运算符。 你必须假装它。 - 当值超过机器字大小时,Ruby的
Fixnum
类会自动升级到Bignum
。 这包括适合无符号字但不是有符号字的数字 - 例如,0xffffffff
是正Bignum
,而不是负Fixnum
。
因此,如果你想要一个旋转操作,你a)必须使用移位运算符来编写它,b)硬编码32或64位或者向Fixnum
询问字大小,以及c)接受结果可能最终成为Bignum
。
话虽如此,这可能会奏效:
class Integer def ror count (self >> count) | (self << (32 - count)) & 0xFFFFFFFF end end
>> printf "0x%x\n", (0x01234567.ror 4) 0x70123456
如果你需要更高的性能,并且不介意添加一个依赖项,那就是bit-twiddle
gem,它提供了用本机代码实现的这个操作:
require 'bit-twiddle/core_ext' # rotate by 8 bits 0x08048586.rrot32(8).to_s(16) # => "86080485"
披露:我是这个gem的作者。
ROR向右旋转。
这是一个可以移植到Ruby的C实现 。
Ruby确实有
- <<按位左移和左移
-
按位右移
运营商