5

Ruby に Rotate Bits Right はありますか?

または、どうすればそれを行うことができますか。

ありがとう

4

3 に答える 3

15

いくつかの事実:

  • Ruby には演算子<<>>シフトがありますが、組み込みの回転演算子はありません。あなたはそれを偽造する必要があります。
  • Ruby のクラスは、値が機械語のサイズを超えると、Fixnum自動的に に昇格します。Bignumこれには、符号なしの単語には収まるが符号付きの単語には収まらない数値が含まれます。たとえば、負ではなく0xffffffff正の単語です。BignumFixnum

したがって、回転操作が必要な場合は、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
于 2010-08-13T13:10:35.160 に答える
1

より高いパフォーマンスが必要で、依存関係の追加を気にしない場合は、bit-twiddleネイティブ コードで実装されたこの操作を提供する gem があります。

require 'bit-twiddle/core_ext'
# rotate by 8 bits
0x08048586.rrot32(8).to_s(16) # => "86080485"

開示:私はこの宝石の作者です。

于 2015-09-25T05:42:46.623 に答える
-1

RORは右回転です。

これは、Ruby に移植できるC 実装です。

ルビーには

  • << ビット単位の左シフトおよび
  • ビット単位の右シフト

オペレーター

于 2010-08-13T13:07:18.633 に答える