PythonユーティリティをRubyに変換しようとしています。問題は、Pythonをよく理解していないことです。
ユーティリティのフラグメントには、次のif
条件が含まれています。
if bits&0x10==0x10:
どういう意味ですか?ビットは変数です。それはある種の「短縮された」「&&」、つまりビットがゼロ以外で値が0x10の場合ですか?ありがとう!
PythonユーティリティをRubyに変換しようとしています。問題は、Pythonをよく理解していないことです。
ユーティリティのフラグメントには、次のif
条件が含まれています。
if bits&0x10==0x10:
どういう意味ですか?ビットは変数です。それはある種の「短縮された」「&&」、つまりビットがゼロ以外で値が0x10の場合ですか?ありがとう!
&
単独はビット単位の and 操作です。つまり、ビットごとに0x10bits
と比較され、両方がその位置のビットを持っている場合、1
その位置の結果が1
得られ、そうでない場合は 0 になります。
bits
基本的に、0x10 は 2 進数で 10000 であるため、これは の 5 番目のビットが に設定されているかどうかをチェックしてい1
ます。
私はルビーについてあまり知りませんが、私の推測では、それにはビットごとの and 演算子が必要であり、おそらくそうなるでしょう&
。したがって、この特定のコードは、Ruby でまったく同じになることになります。
編集: Ruby Operatorsページによると。セクション「Ruby Bitwise Operators」では、&
ビット単位としても Ruby でも機能するため、ユーティリティの翻訳でこれをそのままにしておくことができ、実際に機能するはずです。
変数ビットの5番目のビットが設定されているかどうかを実際にチェックします
使い方
& はビット単位の AND です。
0x10 はバイナリ値 0b10000 の 16 進数です
だから、あなたはこれまでに何が入っているかについて少し賢明なandingを行いbits
ます0b10000
さらに、Ruby はビットごとのテスト用に同様の構造をサポートしています。
if (bits&0x10)
......
end
ティムが述べたように、Python 構造は次のように単純化できることに注意してください。
if bits&0x10:
.......
& は、バイナリのビット単位の "and" 演算子です。
0x10 は 16 進数の 10 です。
ここでpythonドキュメントを読みたいと思うかもしれません