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
- Operátor & vždy vyhodnotí oba výrazy, zatiaľ čo operátor && vyhodnotí druhý výraz, iba ak je prvý pravda
- & 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.