我需要在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"
那么如何进行?
答案 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。
有一个函数可以将整数的二进制表示形式表示为字符串,之后,您可以使用它来执行您喜欢的操作。