Sel*_*lah 5 ruby bit-manipulation
我有一个变量,并希望从该变量中获取一定范围的位。我想要最干净的方法来做到这一点。
如果x = 19767和我想要bit3-bit8(从右边开始):
100110100110111是19767二进制。我想要括号中的部分,100110(100110)111所以答案是38。
用Ruby实现以下功能的最简单/最简洁/最优雅的方法是什么?
bit_range(orig_num, first_bit, last_bit)
Run Code Online (Sandbox Code Playgroud)
PS。计算强度较低的答案的加分点。
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)