在Ruby Integers中提取位

时间:2011-08-18 15:54:36

标签: ruby bit-manipulation

我需要在Ruby中获得整数的第n位,无论是有符号还是无符号。

x = 123 # that is 1111011
n = 2   # bit 2 is ...0 

以下代码在一般情况下不起作用:

x.to_s(2)[-(n+1)] #0 good! but...

因为负数不表示为2补码:

-123.to_s(2) # "-1111011"

那么如何进行?

3 个答案:

答案 0 :(得分:12)

x = 123 # that is 1111011
n = 2   # bit 2 is ...0

x[n]    # => 0

-123[2] # => 1

答案 1 :(得分:4)

def f x, bit
  (x & 1 << bit) > 0 ? 1 : 0
end

答案 2 :(得分:3)

您可以尝试Bindata lib

有一个函数可以将整数的二进制表示形式表示为字符串,之后,您可以使用它来执行您喜欢的操作。