【问题标题】:extract bit in Ruby Integers在 Ruby 整数中提取位
【发布时间】:2011-10-29 22:28:35
【问题描述】:

我需要在 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"

那么如何进行呢?

【问题讨论】:

    标签: ruby bit-manipulation


    【解决方案1】:

    你可以试试Bindata lib

    有一个函数可以将整数的二进制表示为字符串,然后你就可以用它做你喜欢的事情了。

    【讨论】:

      【解决方案2】:
      x = 123 # that is 1111011
      n = 2   # bit 2 is ...0
      
      x[n]    # => 0
      
      -123[2] # => 1
      

      【讨论】:

      • 结果 1 和 0 是相反的。我试图编辑你的帖子没有成功
      • @JCLL:谢谢!这是剪切和粘贴实际上会防止错误的一种情况:-)
      • 嘿,又一个很酷的 Ruby 运算符:Fixnum 上的 [],不知何故,在文档中都像白天一样平淡无奇,但同时又被埋没了。
      • 有没有办法在该索引处设置位,而不是仅仅获取?例如a=2; a[0] = 1; a #=>3?
      • @Mirror318:不。Integers 是不可变的。
      【解决方案3】:
      def f x, bit
        (x & 1 << bit) > 0 ? 1 : 0
      end
      

      【讨论】:

      • 如果你只想要一个真/假结果,你可以省略? 1 : 0
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 2018-08-27
      • 1970-01-01
      相关资源
      最近更新 更多