2011-08-18 13 views
5

Rubyでは、整数のn番目のビット(符号付きまたは符号なし)を取得する必要があります。Ruby整数の抽出ビット

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

次のコードは、一般的なケースでは動作しない。負の数の2補数として表現されていないため

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

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

どのように進行します?

答えて

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

x[n] # => 0 

-123[2] # => 1 
+0

結果1と0が逆になります。私は成功なしであなたの投稿を編集しようとしました – JCLL

+0

@JCLL:ありがとう!これはカット&ペーストが実際にはバグを防ぐことができた1つのケースです:-) –

+4

Heh、もう1人のすばらしいRuby演算子:Fixnumの[]は何とか、 – DigitalRoss

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

真偽結果が必要な場合は、「? 1:0 ' – DigitalRoss

3

Bindata libを試すことができます。

整数のバイナリ表現を文字列として表現する関数があり、それを使って好きなことを行うことができます。