旋转位在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确实有

  • <<按位左移和左移
  • 按位右移

运营商