私は3バイトの値DB(DB_1、DB_2、DB_3)を持っています。 特定のビットについてはDB_3をチェックする必要があります。たとえば、私は参照する必要があります DB_3 == 11X0XXXX
ここでは、ビット4,6,7だけをチェックする必要があります。 X
とマークされたビットは任意の値を取ることができ、チェックしないでください。私はJavaでビット操作に精通していないと任意の助けに喜んでいる! ありがとう!バイトのJavaビット単位の比較
答えて
あなたが特定のビットにマスキングを達成するためにビット単位のAND(Javaで&
)を使用することができます(マスクが二行目であり、唯一の最初のこれらのビットをできるようになります
11101001
& 11010000
----------
11000000
↑↑ ↑
あなたは正確に両方のオペランドで1
たこれらのビットを保持しますので、基本的にすべてのそれらのビットを設定し0
にあなたに:マスク)[計算の下にある矢印の付い] 1
を有する場合を通る線に興味がありません。
だから、あなただけの
if (DB_3 & 0xD0 == 0xC0) { ... }
0xD0
を行う必要がありますが、バイナリで11010000
であり、あなたはそれが192
、または11000000
ある0xC0
と一致するかどうかを知りたい208
の16進形式です。あなたは、あなたが気にしていないビット(あなたの質問のX
es)は、この時点でビット単位のANDのためにすでにゼロであることを知っています。
ETA(2011年12月14日午後2時24分):あなたはマスクがより容易に明らかになり
if (DB_3 & 0b11010000 == 0b11000000) { ... }
を行うことができますので、どうやらJavaの7は、binary integer literalsを持っています。ありがとう、Glenn。
私はJava 7にバイナリリテラルがあると思います:http://docs.oracle.com/javase/7/docs/technotes/guides/language/binary-literals.html – Glenn
ジョーイの方法がうまく動作しますが、ここで私は個人的に、より直感的に感じていると思われ、それを行うための別の方法です。
DB_3
の外観を定義するMASK1 = 11000000
と、考慮するビットを定義するMASK2 = 11010000
の2つのマスクが必要です。 1
のビットがMASK2
の場合、私たちが気にするビットを示し、0
ビットは気にしないビットを示します。
MASK1
で排他的論理和をとり、MASK2
でANDを行い、結果がMASK2
に等しいかどうかを確認します。最初の2つの操作では、とMASK1
が一致する1
が入ります。 3番目の操作では、で示されるビットを除いて、結果のすべての数字が0
になります(MASK2
)。この比較は、となり、が1
sで示される位置でMASK1
と一致する場合にのみ、MASK2
になります。ビット演算の
int MASK1 = Integer.parseInt("11000000", 2); // tell parseInt to use base 2
int MASK2 = Integer.parseInt("11010000", 2);
boolean matches = (~(DB_3^MASK1) & MASK2) == MASK2;
例:
11101001
^ 11000000
----------
00101001
~
----------
11010110
& 11010000
----------
11010000
私はそれが理解できた願っています。
私はおそらく追加します正確なビットマスクは 'parseInt'を使う代わりにコメントとして扱いますが、それは個人的な好みかもしれません(そして、コメントは古いかもしれません)。しかし、GrennはJavaにはバイナリリテラルが存在することが明らかになりました。 – Joey
もし私がこれを "本当のために"行っていたなら、おそらく十進表現を計算し、 '208d = 11010000b'というコメントを追加するでしょう。ここでの 'parseInt'の使用は、ほとんどがわかりやすくするためのものでした。私は当時のこのようなコメントを使わないと思っていました... –
- 1. バイト単位でビット単位でインクリメント(C#)
- 2. ビット単位の操作と値の比較
- 3. 2つの16進文字列のビット単位の比較方法は?
- 4. 比較タプルの要素単位のpython
- 5. MySQLでの日単位のパフォーマンス比較
- 6. 0b1111_1111のバイト単位のビット単位の演算は何をしますか?
- 7. 2バイトの最上位ビット
- 8. ActiveRecordの比較とビット単位インタフェースはどこにありますか?
- 9. バイト配列のビット単位の論理和
- 10. 論理とビットの比較
- 11. バイト値mikrotikの比較スクリプト
- 12. バイト配列の比較
- 13. ビット単位のXOR演算とバイト配列
- 14. 比較ビット(一度に一つの位置)
- 15. Javaの単語を比較する
- 16. 文字列にバイト値(8ビット)を追加してJavaのバイト単位で読み込む方法
- 17. SVGとDPI、絶対単位とユーザー単位:InkscapeとFirefoxの比較ImageMagick
- 18. TSQLビット単位のNOTビットを反転
- 19. のJava - 比較
- 20. C比較ビットを比較するときのソートセグメンテーションフォルト
- 21. ビット単位でのシフト
- 22. Doctrine2 Querybuilderのビット単位で
- 23. JavaScriptビット単位のマスク
- 24. ルアの「ビット単位AND」
- 25. GCCビット単位の属性
- 26. ビット単位のオーバーフローチェックin c
- 27. ビット単位のモジュラス計算
- 28. ビット単位のシフト精度
- 29. ビット単位の操作:FitsBits
- 30. ビット単位のbitmanipulationパズル
http://en.wikipedia.org/wiki/Bitwise_operationを読むことをお勧めします。 –