2016-03-21 10 views
4

Auf meine vorherige Frage, wie verglichen wird, wenn kombinierte Bits ein bestimmtes Bit enthalten, werde ich in diesen Fehler ausgeführt.Operator "&" kann nicht auf Byte angewendet werden, 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 

Wenn ich warf die Fahnen der Fehler int auf Byte mit byte ersetzt.

+0

Oh, noch einem anderen Java-Operator Vorrang Frage ... es ist in der Tat verwirrend für mich! (natürlich ist es immer noch besser als PHP '?:': P) – minmaxavg

Antwort

9

Der Compiler sieht den binären Operator & in Ihrer if Anweisung, behandelt sie als logische UND (da es erwartet einen Ausdruck, der eine boolean zurückgibt), und prüft die Typen der Argumente.

Es trifft man int Argument - combined - und ein boolean Argument - flag1 == flag1. Da es zwei boolean Argumente erwartet (der & Operator kann nicht auf eine int und eine boolean angewendet werden), gibt es einen Fehler.

Klammern, um für die Betreiber Fügen Sie in der gewünschten Reihenfolge ausgewertet werden: zu

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

Danke, lol ich habe versucht, Ihren Beitrag zu bearbeiten, seit ich meine Frage bearbeitet habe. Aber gleich nachdem du aktualisiert hast;). 'AOE' sollte entweder' flag1' oder 'flag4' sein. In meiner vorherigen Frage gab mir jeder die Antwort ohne Klammern, ich frage mich, warum ... – Madmenyo

+0

@MennoGouw Ja, ich bemerkte Ihre Bearbeitung und fügte sie der Antwort hinzu. – Eran

+0

Danke für eine sehr gut erklärte Antwort. Ich bin neu im Vergleich und Operationen, aber ich verstehe jetzt. – Madmenyo