Ruby に Rotate Bits Right はありますか?
または、どうすればそれを行うことができますか。
ありがとう
いくつかの事実:
<<
と>>
シフトがありますが、組み込みの回転演算子はありません。あなたはそれを偽造する必要があります。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"
開示:私はこの宝石の作者です。