Bitwise & vs Logical && Operators
1. Introduktion
I Java har vi to måder at sige “AND” på. Men hvad skal man bruge?
I denne vejledning ser vi på forskellene mellem & og &&. Og vi lærer om bitvise operationer og kortslutning undervejs.
2. Brug af Bitwise OG
Den bitvise AND (&) operator sammenligner hvert binært ciffer med to heltal og returnerer 1, hvis begge er 1, ellers returnerer den 0.
Lad os se på to heltal:
int seks = 6; int fem = 5;
Lad os derefter anvende en bitvis OG-operator på disse tal:
int resultShouldBeFour = seks & fem; assertEquals (4, resultShouldBeFour);
For at forstå denne operation, lad os se på den binære repræsentation af hvert nummer:
Binær med decimal 4: 0100 Binær med decimal 5: 0101 Binær med decimal 6: 0110
Operatoren & udfører et logisk AND på hver bit og returnerer et nyt binært tal:
0110 0101 ----- 0100
Endelig vores resultat - 0100 – kan konverteres tilbage til decimaltal - 4.
Lad os se test-Java-koden:
int seks = 6; int fem = 5; int resultShouldBeFour = seks & fem; assertEquals (4, resultShouldBeFour);
2.1. Brug af & med booleanere
Vi kan også bruge den bitvise AND (&) operatør med boolsk operander. Det vender tilbage rigtigt kun hvis begge operander er rigtigtEllers vender det tilbage falsk.
Lad os tage tre boolsk variabler:
boolsk trueBool = sand; boolsk anotherTrueBool = sand; boolsk falseBool = false;
Lad os derefter anvende en bitvis OG-operator på variabler trueBool og anotherTrueBool:
boolsk trueANDtrue = trueBool & anotherTrueBool;
Derefter bliver resultatet rigtigt.
Lad os derefter anvende en bitvis OG-operator på trueBool og falseBool:
boolsk trueANDFalse = trueBool & falseBool;
I dette tilfælde bliver resultatet falsk.
Lad os se test-Java-koden:
boolsk trueBool = sand; boolsk anotherTrueBool = sand; boolsk falseBool = false; boolsk trueANDtrue = trueBool & anotherTrueBool; boolsk trueANDFalse = trueBool & falseBool; assertTrue (trueANDtrue); assertFalse (trueANDFalse);
3. Brug af logisk OG
Synes godt om &, den logiske AND (&&) operator sammenligner værdien af to boolske variabler eller udtryk. Og det vender også tilbage rigtigt kun hvis begge operander er rigtigtEllers vender det tilbage falsk.
Lad os tage tre boolsk variabler:
boolsk trueBool = sand; boolsk anotherTrueBool = sand; boolsk falseBool = false;
Lad os derefter anvende en logisk AND-operator på variabler trueBool og anotherTrueBool:
boolsk trueANDtrue = trueBool && anotherTrueBool;
Derefter bliver resultatet rigtigt.
Lad os derefter anvende en logisk AND-operator på trueBool og falseBool:
boolsk trueANDFalse = trueBool && falseBool;
I dette tilfælde bliver resultatet falsk.
Lad os se test-Java-koden:
boolsk trueBool = sand; boolsk anotherTrueBool = sand; boolsk falseBool = false; boolsk anotherFalseBool = false; boolsk trueANDtrue = trueBool && anotherTrueBool; boolsk trueANDFalse = trueBool && falseBool; boolsk falseANDFalse = falseBool && anotherFalseBool; assertTrue (trueANDtrue); assertFalse (trueANDFalse); assertFalse (falseANDFalse);
3.1. Kortslutning
Så hvad er forskellen? Godt, det && kortslutning til operatøren. Dette betyder, at den ikke evaluerer højre side eller udtryk, når venstre side eller udtryk er falsk.
Lad os tage to udtryk, der vurderes som falske:
Første udtryk: 2 <1 Andet udtryk: 4 <5
Når vi anvender en logisk AND-operator på udtryk 2<1 og 4<5, derefter evaluerer det kun det første udtryk 2<1 og vender tilbage falsk.
boolsk shortCircuitResult = (2 <1) && (4 <5); assertFalse (shortCircuitResult);
3.2. Brug af && med heltal
Vi kan bruge & operatoren med boolske eller numeriske typer, men && kan kun bruges med boolske operander. Brug af det med heltalsoperander resulterer i en kompileringsfejl:
int fem = 2; int seks = 4; int resultat = fem && seks;
4. Sammenligning
- & Operatoren evaluerer altid begge udtryk, mens && operatoren kun vurderer det andet udtryk, hvis det første er rigtigt
- & sammenligner hver operand bitvis, mens && kun fungerer på booleanere
5. Konklusion
I denne artikel brugte vi bitvis & operatør til at sammenligne bits med to cifre, hvilket resulterer i et nyt ciffer. Vi brugte også det logiske && operatør til at sammenligne to booleanske, hvilket resulterer i en boolsk værdi.
Vi så også nogle vigtige forskelle mellem de to operatører.
Som altid kan du finde koden til denne tutorial på GitHub.