2016-03-21 21 views
4

結合ビットに特定のビットが含まれているかどうかを比較する方法について私の前の質問でこのエラーが発生しています。演算子 "&"はbyte、int、booleanには適用できません

int flag1 = 1 << 0; 
    int flag4 = 1 << 5; 

    int combined = flag1 | flag4; 

    if (combined & flag1 == flag1) // <-- Operator & cannot be applied to int, boolean 

私はエラーがバイトするフラグをキャストした場合byteintを置き換えます。

+0

ああ、また別のJava演算子優先順位の質問:

は、所望の順序で評価される演算子のために、括弧を追加します! (もちろん、それはまだPHPより優れています? ':':P) – minmaxavg

答えて

9

ifステートメントにバイナリ演算子&があり、論理ANDとして扱われます(booleanを返す式が必要なので)。引数の型をチェックします。 combined - - と1つのboolean引数 - flag1 == flag1

これは、1つのint引数に遭遇します。 boolean引数を2つ(&演算子はintbooleanには適用できません)と予想しているため、エラーとなります。それはあまりにも確かに私には混乱して...

if ((combined & flag1) == flag1) 
+0

ありがとう、笑私は私の質問を編集したのであなたの投稿を編集しようとしました。しかしあなたが更新した直後;)。 'AOE'は' flag1'または 'flag4'のいずれかでなければなりません。私の以前の質問では、誰も私にかっこなしで答えを与えていた、私はなぜ思ったのだろう... – Madmenyo

+0

@MennoGouwうん、私はあなたの編集に気づき、答えに追加しました。 – Eran

+0

非常によく説明された答えをありがとう。私はビット比較と操作に新しいですが、私は今理解しています。 – Madmenyo

関連する問題