Ruby-从变量获取位范围

Sel*_*lah 5 ruby bit-manipulation

我有一个变量,并希望从该变量中获取一定范围的位。我想要最干净的方法来做到这一点。

如果x = 19767和我想要bit3-bit8(从右边开始): 10011010011011119767二进制。我想要括号中的部分,100110(100110)111所以答案是38。

用Ruby实现以下功能的最简单/最简洁/最优雅的方法是什么?

bit_range(orig_num, first_bit, last_bit)
Run Code Online (Sandbox Code Playgroud)

PS。计算强度较低的答案的加分点。

Dig*_*oss 3

19767.to_s(2)[-9..-4].to_i(2)
Run Code Online (Sandbox Code Playgroud)

或者

19767 >> 3 & 0x3f
Run Code Online (Sandbox Code Playgroud)

更新:

从汤到坚果(为什么人们这么说呢?)...

class Fixnum
  def bit_range low, high
    len = high - low + 1
    self >> low & ~(-1 >> len << len)
  end
end

p 19767.bit_range(3, 8)
Run Code Online (Sandbox Code Playgroud)