Bitweise & vs Logische && Operatoren

1. Einleitung

In Java gibt es zwei Möglichkeiten, "UND" zu sagen. Aber welche verwenden?

In diesem Tutorial werden die Unterschiede zwischen & und && untersucht. Auf dem Weg lernen wir etwas über bitweise Operationen und Kurzschlüsse.

2. Verwendung von bitweisem UND

Der bitweise AND (&) -Operator vergleicht jede Binärziffer von zwei ganzen Zahlen und gibt 1 zurück, wenn beide 1 sind, andernfalls gibt er 0 zurück.

Schauen wir uns zwei ganze Zahlen an:

int six = 6; int five = 5;

Als nächstes wenden wir einen bitweisen UND-Operator auf diese Zahlen an:

int resultShouldBeFour = six & five; assertEquals(4, resultShouldBeFour);

Um diese Operation zu verstehen, schauen wir uns die binäre Darstellung jeder Zahl an:

Binary of decimal 4: 0100 Binary of decimal 5: 0101 Binary of decimal 6: 0110

Der Operator & führt für jedes Bit ein logisches UND aus und gibt eine neue Binärzahl zurück:

0110 0101 ----- 0100

Schließlich kann unser Ergebnis - 0100 - wieder in die Dezimalzahl - 4 konvertiert werden .

Sehen wir uns den Test-Java-Code an:

int six = 6; int five = 5; int resultShouldBeFour = six & five; assertEquals(4, resultShouldBeFour);

2.1. Verwendung von & mit Booleschen Werten

Wir können auch den bitweisen AND ( & ) -Operator mit booleschen Operanden verwenden. Es gibt wahr nur , wenn beide Operanden wahr , sonst, gibt sie falsch.

Nehmen wir drei boolesche Variablen:

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false;

Als nächstes wenden wir einen bitweisen AND-Operator auf die Variablen trueBool und anotherTrueBool an :

boolean trueANDtrue = trueBool & anotherTrueBool;

Dann ist das Ergebnis wahr .

Als nächstes wenden wir einen bitweisen AND-Operator auf trueBool und falseBool an :

boolean trueANDFalse = trueBool & falseBool;

In diesem Fall ist das Ergebnis falsch .

Sehen wir uns den Test-Java-Code an:

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false; boolean trueANDtrue= trueBool & anotherTrueBool; boolean trueANDFalse = trueBool & falseBool; assertTrue(trueANDtrue); assertFalse(trueANDFalse);

3. Verwendung von logischem UND

Wie & vergleicht der logische AND ( && ) -Operator den Wert zweier boolescher Variablen oder Ausdrücke. Und es gibt auch wahr nur , wenn beide Operanden wahr , sonst, gibt sie falsch .

Nehmen wir drei boolesche Variablen:

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false;

Als nächstes wenden wir einen logischen AND-Operator auf die Variablen trueBool und anotherTrueBool an :

boolean trueANDtrue = trueBool && anotherTrueBool;

Dann ist das Ergebnis wahr .

Als nächstes wenden wir einen logischen AND-Operator auf trueBool und falseBool an :

boolean trueANDFalse = trueBool && falseBool;

In diesem Fall ist das Ergebnis falsch .

Sehen wir uns den Test-Java-Code an:

boolean trueBool = true; boolean anotherTrueBool = true; boolean falseBool = false; boolean anotherFalseBool = false; boolean trueANDtrue = trueBool && anotherTrueBool; boolean trueANDFalse = trueBool && falseBool; boolean falseANDFalse = falseBool && anotherFalseBool; assertTrue(trueANDtrue); assertFalse(trueANDFalse); assertFalse(falseANDFalse);

3.1. Kurzschluss

Also, was ist der Unterschied? Nun, der && Operator schließt kurz. Dies bedeutet, dass der Operand oder Ausdruck auf der rechten Seite nicht ausgewertet wird, wenn der Operand oder Ausdruck auf der linken Seite falsch ist .

Nehmen wir zwei Ausdrücke, die als falsch bewertet werden:

First Expression: 2<1 Second Expression: 4<5 

Wenn wir einen logischen UND-Operator auf die Ausdrücke 2 <1 und 4 <5 anwenden , wertet er nur den ersten Ausdruck 2 <1 aus und gibt false zurück.

boolean shortCircuitResult = (2<1) && (4<5); assertFalse(shortCircuitResult);

3.2. Verwendung von && mit ganzen Zahlen

Wir können den Operator & mit booleschen oder numerischen Typen verwenden, aber && kann nur mit booleschen Operanden verwendet werden. Die Verwendung mit ganzzahligen Operanden führt zu einem Kompilierungsfehler:

int five = 2; int six = 4; int result = five && six;

4. Vergleich

  1. Der Operator & wertet immer beide Ausdrücke aus, während der Operator && den zweiten Ausdruck nur auswertet, wenn der erste wahr ist
  2. & vergleicht jeden Operanden bitweise, während && nur mit Booleschen Werten arbeitet

5. Schlussfolgerung

In diesem Artikel haben wir den bitweisen & -Operator verwendet, um zweistellige Bits zu vergleichen, was zu einer neuen Ziffer führt. Außerdem haben wir den logischen Operator && verwendet , um zwei Boolesche Werte zu vergleichen, was zu einem booleschen Wert führte.

Wir haben auch einige wesentliche Unterschiede zwischen den beiden Betreibern festgestellt.

Wie immer finden Sie den Code für dieses Tutorial auf GitHub.