旋转位在Ruby中的右操作

Rob*_*att 5 ruby bitwise-operators

Ruby中有旋转位吗?

或者我该怎么办呢.

谢谢

Jos*_*Lee 15

一些事实:

  • Ruby有运算符<<>>移位,但没有内置的旋转运算符.你必须假装它.
  • 当值超过机器字大小时,Ruby的Fixnum类会自动升级Bignum.这包括适合无符号字但不是有符号字的数字 - 例如,0xffffffff是正数Bignum,而不是负数Fixnum.

所以,如果你想有一个旋转的操作,你)必须使用移位运算符,B)手动编码32个或64位,或要求写Fixnum了字的大小,以及c)接受的结果可能最终是一个Bignum.

话虽这么说,这可能会奏效:

class Integer
  def ror count
    (self >> count) | (self << (32 - count)) & 0xFFFFFFFF
  end
end
Run Code Online (Sandbox Code Playgroud)
>> printf "0x%x\n", (0x01234567.ror 4)
0x70123456
Run Code Online (Sandbox Code Playgroud)

  • ('1'*32).to_i(2) 不是一个好主意。它确实施展,操作缓慢。最好使用 2**32-1 之类的东西 (2认同)