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"
どのように進行します?
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"
どのように進行します?
x = 123 # that is 1111011
n = 2 # bit 2 is ...0
x[n] # => 0
-123[2] # => 1
Bindata libを試すことができます。
整数のバイナリ表現を文字列として表現する関数があり、それを使って好きなことを行うことができます。
結果1と0が逆になります。私は成功なしであなたの投稿を編集しようとしました – JCLL
@JCLL:ありがとう!これはカット&ペーストが実際にはバグを防ぐことができた1つのケースです:-) –
Heh、もう1人のすばらしいRuby演算子:Fixnumの[]は何とか、 – DigitalRoss