XOR-operatören i Java

1. Översikt

I den här korta handledningen ska vi lära oss mer om Java XOR- operatören. Vi kommer att gå igenom lite teori om XOR- operationer och sedan se hur vi implementerar dem i Java.

2. XOR- operatören

Låt oss börja med en liten påminnelse om XOR- operationens semantik . Den XOR- logiska operationen, eller exklusiv eller , tar två booleska operander och returnerar true om och bara om operanderna är olika. Således returnerar den falskt om de två operanderna har samma värde.

Så, XOR- operatören kan användas, till exempel när vi måste kontrollera två förhållanden som inte kan vara sanna samtidigt.

Låt oss överväga två villkor, A och B. Sedan visar följande tabell de möjliga värdena för A XOR B :

Den A XOR B operation är ekvivalent med (A OCH! B) OR (! A OCH B) . Parenteser har inkluderats för tydlighetens skull, men är valfria, eftersom AND- operatören har företräde framför OR- operatören.

3. Hur gör man det i Java?

Låt oss nu se hur man uttrycker XOR- operationen i Java. Naturligtvis har vi möjligheten att använda && och || operatörer, men det här kan vara lite ordligt , som vi kommer att se.

Föreställ dig en bilklass med två booleska attribut: diesel och manuell . Och nu, låt oss säga att vi vill berätta om bilen antingen är diesel eller manuell, men inte båda.

Låt oss kontrollera detta med && och || operatörer:

Car car = Car.dieselAndManualCar(); boolean dieselXorManual = (car.isDiesel() && !car.isManual()) || (!car.isDiesel() && car.isManual());

Det är lite långt, särskilt med tanke på att vi har ett alternativ - Java XOR- operatören, representerad av ^ symbolen . Det är en bitvis operatör - det vill säga en operatör som jämför de matchande bitarna med två värden för att returnera ett resultat. I XOR- fallet, om två bitar av samma position har samma värde, blir den resulterande biten 0. Annars blir den 1.

Så istället för vår besvärliga XOR- implementering kan vi använda ^ -operatören direkt :

Car car = Car.dieselAndManualCar(); boolean dieselXorManual = car.isDiesel() ^ car.isManual();

Som vi kan wee, den ^ tillåter föraren oss att vara mer koncis uttrycka XOR operationer.

Slutligen är det värt att nämna att XOR- operatören, som de andra bitvisa operatörerna, fungerar med alla primitiva typer. Låt oss till exempel överväga två heltal 1 och 3, vars binära representationer är 00000001 respektive 000000011. Använda XOR- operatören mellan dem resulterar sedan i heltal 2:

assertThat(1 ^ 3).isEqualTo(2);

Endast den andra biten är annorlunda i de två siffrorna, därför blir resultatet av XOR- operatören på denna bit 1. Alla andra bitar är identiska, så deras bitvisa XOR- resultat är 0, vilket ger oss ett slutvärde på 00000010 - den binära representationen av heltalet 2.

4. Slutsats

I den här artikeln lärde vi oss om Java XOR- operatören. Vi såg att det erbjuder ett kortfattat sätt att uttrycka XOR- operationer.

Som vanligt kan artikelns fullständiga kod hittas på GitHub.