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

  1. & Operatoren evaluerer altid begge udtryk, mens && operatoren kun vurderer det andet udtryk, hvis det første er rigtigt
  2. & 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.