Rotate Bits Right operation in Ruby

后端 未结 3 734
谎友^
谎友^ 2021-01-06 04:21

Is there a Rotate Bits Right in Ruby ?

Or how can I do that please.

Thanks

3条回答
  •  没有蜡笔的小新
    2021-01-06 04:41

    Some facts:

    • Ruby has operators << and >> to shift, but no built-in rotate operator. You have to fake it.
    • Ruby's Fixnum class automatically promotes to Bignum when the value exceeds the machine word size. This includes numbers that would fit in an unsigned word but not a signed word -- for example, 0xffffffff is a positive Bignum, not a negative Fixnum.

    So if you want a rotate operation, you a) have to write it using the shift operators, b) either hardcode 32 or 64 bits or ask Fixnum for the word size, and c) accept that the result might end up being a Bignum.

    That being said, this might work:

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

提交回复
热议问题