Operatori && logici e bit per bit

1. Introduzione

In Java, abbiamo due modi per dire "AND". Ma quale usare?

In questo tutorial, esamineremo le differenze tra & e &&. E impareremo le operazioni bit per bit e il cortocircuito lungo il percorso.

2. Utilizzo di AND bit per bit

L'operatore AND bit per bit (&) confronta ogni cifra binaria di due numeri interi e restituisce 1 se entrambi sono 1, altrimenti restituisce 0.

Diamo un'occhiata a due numeri interi:

int six = 6; int five = 5;

Successivamente, applichiamo un operatore AND bit per bit su questi numeri:

int resultShouldBeFour = six & five; assertEquals(4, resultShouldBeFour);

Per capire questa operazione, diamo un'occhiata alla rappresentazione binaria di ogni numero:

Binary of decimal 4: 0100 Binary of decimal 5: 0101 Binary of decimal 6: 0110

L'operatore & esegue un AND logico su ogni bit e restituisce un nuovo numero binario:

0110 0101 ----- 0100

Infine, il nostro risultato - 0100 - può essere riconvertito in numero decimale - 4 .

Vediamo il codice Java di prova:

int six = 6; int five = 5; int resultShouldBeFour = six & five; assertEquals(4, resultShouldBeFour);

2.1. Uso di & con valori booleani

Inoltre, possiamo usare l'operatore AND bit per bit ( & ) con operandi booleani . Restituisce vero solo se entrambi gli operandi sono veri , altrimenti restituisce falso.

Prendiamo tre variabili booleane :

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

Successivamente, applichiamo un operatore AND bit per bit sulle variabili trueBool e un altroTrueBool :

boolean trueANDtrue = trueBool & anotherTrueBool;

Quindi, il risultato sarà vero .

Successivamente, applichiamo un operatore AND bit per bit su trueBool e falseBool :

boolean trueANDFalse = trueBool & falseBool;

In questo caso, il risultato sarà falso .

Vediamo il codice Java di prova:

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

3. Uso di AND logico

Come & , l' operatore logico AND ( && ) confronta il valore di due variabili o espressioni booleane. Inoltre, restituisce anche true solo se entrambi gli operandi sono veri , altrimenti restituisce false .

Prendiamo tre variabili booleane :

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

Successivamente, applichiamo un operatore logico AND sulle variabili trueBool e un altroTrueBool :

boolean trueANDtrue = trueBool && anotherTrueBool;

Quindi, il risultato sarà vero .

Successivamente, applichiamo un operatore AND logico su trueBool e falseBool :

boolean trueANDFalse = trueBool && falseBool;

In questo caso, il risultato sarà falso .

Vediamo il codice Java di prova:

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. Corto circuito

Allora, qual è la differenza? Bene, l' operatore && va in cortocircuito. Ciò significa che non valuta l'operando o l'espressione a destra quando l'operando o l'espressione a sinistra è falsa .

Prendiamo due espressioni che vengono valutate come false:

First Expression: 2<1 Second Expression: 4<5 

When we apply a logical AND operator on expressions 2<1 and 4<5, then it evaluates only the first expression 2<1 and returns false.

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

3.2. Use of && with Integers

We can use the & operator with boolean or numeric types but && can only be used with boolean operands. Using it with integer operands results in a compilation error:

int five = 2; int six = 4; int result = five && six;

4. Comparison

  1. The & operator always evaluates both expressions, whereas the && operator evaluates the second expression only if the first one is true
  2. & compares each operand bitwise, whereas && operates only on booleans

5. Conclusion

In questo articolo, abbiamo utilizzato l' operatore & bit per bit per confrontare bit di due cifre risultando in una nuova cifra. Inoltre, abbiamo utilizzato l' operatore logico && per confrontare due valori booleani, ottenendo un valore booleano.

Abbiamo anche notato alcune differenze fondamentali tra i due operatori.

Come sempre puoi trovare il codice per questo tutorial su GitHub.