Bitové & vs logické && operátory

1. Úvod

V prostredí Java máme dva spôsoby, ako povedať „AND“. Ale ktoré použiť?

V tomto tutoriáli sa pozrieme na rozdiely medzi & a &&. Ďalej sa naučíme bitové operácie a skraty.

2. Použitie bitových tokov A

Bitový operátor AND (&) porovnáva každú binárnu číslicu dvoch celých čísel a vracia 1, ak sú obidve 1, inak vráti 0.

Pozrime sa na dve celé čísla:

int šesť = 6; int päť = 5;

Ďalej použijeme bitový operátor AND na tieto čísla:

int resultShouldBeFour = šesť a päť; assertEquals (4, resultShouldBeFour);

Aby sme tejto operácii porozumeli, pozrime sa na binárne znázornenie každého čísla:

Binárny údaj z desatinného miesta 4: 0100 Binárny údaj z desatinného miesta 5: 0101 Binárny údaj z desatinného miesta 6: 0110

Operátor & vykoná logické AND na každom bite a vráti nové binárne číslo:

0110 0101 ----- 0100

Nakoniec náš výsledok - 0100 – možno previesť späť na desatinné číslo - 4.

Pozrime sa na testovací kód Java:

int šesť = 6; int päť = 5; int resultShouldBeFour = šesť a päť; assertEquals (4, resultShouldBeFour);

2.1. Použitie a s Booleans

Môžeme tiež použiť bitové AND (&) operátor s boolovský operandy. Vracia sa to pravda iba ak sú obidva operandy pravda, inak sa vráti nepravdivé.

Zoberme si tri boolovský premenné:

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

Ďalej použijeme bitový operátor AND na premenné trueBool a anotherTrueBool:

boolean trueANDtrue = trueBool & anotherTrueBool;

Výsledok potom bude pravda.

Ďalej použijeme bitový operátor AND na trueBool a falseBool:

boolean trueANDFalse = trueBool & falseBool;

V takom prípade bude výsledok nepravdivé.

Pozrime sa na testovací kód Java:

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

3. Použitie logiky A

Páči sa mi to &, logické AND (&&) operátor porovnáva hodnotu dvoch boolovských premenných alebo výrazov. A tiež sa vracia pravda iba ak sú obidva operandy pravda, inak sa vráti nepravdivé.

Zoberme si tri boolovský premenné:

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

Ďalej použijeme logický operátor AND na premenné trueBool a anotherTrueBool:

boolean trueANDtrue = trueBool && anotherTrueBool;

Výsledok potom bude pravda.

Ďalej použijeme logický operátor AND na trueBool a falseBool:

boolean trueANDFalse = trueBool && falseBool;

V takom prípade bude výsledok nepravdivé.

Pozrime sa na testovací kód Java:

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. Skrat

Aký je teda rozdiel? No, the && skraty operátora. To znamená, že nevyhodnocuje operand alebo výraz na pravej strane, keď je operand alebo výraz na ľavej strane nepravdivé.

Zoberme si dva výrazy, ktoré vyhodnotíme ako nepravdivé:

Prvý výraz: 2 <1 Druhý výraz: 4 <5 

Keď na výrazy použijeme logický operátor AND 2<1 a 4<5, potom vyhodnotí iba prvý výraz 2<1 a vráti sa nepravdivé.

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

3.2. Použitie && s celými číslami

Operátor & môžeme použiť s boolovskými alebo číselnými typmi, ale && sa dá použiť iba s boolovskými operandmi. Jeho použitie s celočíselnými operandami vedie k chybe kompilácie:

int päť = 2; int šesť = 4; int výsledok = päť && šesť;

4. Porovnanie

  1. Operátor & vždy vyhodnotí oba výrazy, zatiaľ čo operátor && vyhodnotí druhý výraz, iba ak je prvý pravda
  2. & porovnáva každý operand po bitoch, zatiaľ čo && pracuje iba s boolovskými hodnotami

5. Záver

V tomto článku sme použili bitový tok & operátor na porovnanie dvojciferných bitov, ktorých výsledkom je nová číslica. Použili sme tiež logické riešenie && operátor na porovnanie dvoch boolov, výsledkom čoho je boolovská hodnota.

Videli sme tiež niektoré kľúčové rozdiely medzi týmito dvoma operátormi.

Ako vždy nájdete kód tohto tutoriálu na GitHub.