Precedenza dell'operatore - 1

"Ciao Bilaabo!"

"Bilaabo è felice di salutare il suo amico!"

"Oggi Bilaabo ti parlerà della precedenza degli operatori. Ma prima ti parlerà degli operatori stessi."

"Cosa sono questi operatori di cui parli?"

"In realtà, li conosci già. Forse non sapevi che si chiamano operatori."

"Ad esempio, supponiamo di avere l'espressione  c = a + b; "

"Ha due operatori: un operatore di addizione e un operatore di assegnazione."

"In altre parole, gli operatori sono solo segni matematici? Come la moltiplicazione, la divisione e l'addizione?"

"Sì, è vero. Tuttavia, ci sono delle differenze."

"Non definirò gli operatori per te: una definizione non ti renderà più intelligente. È meglio vederli in azione. Gli operatori possono essere divisi in diversi gruppi, che esamineremo ora."

1) " Operatori matematici "

Simbolo Esempio Nome Descrizione (cosa fa)
+ a + b Operatore di addizione Operatore di addizione.
- c - d Operatore di sottrazione Sottrae il secondo numero dal primo.
* a * t Operatore di moltiplicazione Moltiplica due numeri.
/ a / b Operatore di divisione Divide il primo numero per il secondo.
% c % d Divide il primo numero per il secondo. Calcola il resto dopo aver diviso il primo numero per il secondo.
- -a Meno unario Cambia il segno della variabile nel suo opposto.
Da più a meno e da meno a più.
+ +a Più unario Non cambia nulla. Questo è stato aggiunto per complimentarmi con l'operatore meno unario. È solo per l'aspetto.

"Li riconosco dalla scuola. Il mio firmware include i corsi scolastici."

"Ma cos'è quel segno di percentuale, una specie di magia?"

"È l'operatore " resto dopo divisione ". Se 11 è diviso per 5, otteniamo 2 e un resto di 1. Questo 1 può essere ottenuto scrivendo 11 % 5;"

"Quando dividi numeri interi in Java, anche il risultato è un numero intero. Il resto dell'operazione di divisione viene semplicemente ignorato. Se dividiamo 8 per 5, otteniamo 1."

Espressione Risultato
19 / 10 1 Se dividiamo 19 per 10, il risultato è 1 con resto di 9.
19 % 10 9 Se dividiamo 19 per 10, il risultato è 1 con resto di 9.
2 / 5 0 Se dividiamo 2 per 5, il  risultato è 0 con resto di 2.
16 % 2 0 Se dividiamo 16 per 2, il risultato è 8 con resto 0.

"Ma a cosa ci serve il resto del mondo?"

"Supponiamo di dover verificare se un numero intero è pari. Quindi puoi scrivere:"

if (a % 2 == 0)

"E se hai bisogno di controllare se b è dispari, allora puoi scrivere:"

if (b % 2 == 1)

"O per verificare se d è divisibile per 3:"

if (d % 3 == 0)

"Interessante. Me ne ricorderò."

2)  " Operatori di confronto "

Simbolo Esempio Nome Descrizione (cosa fa)
< a < b Meno di Controlla se a è minore di b.
<= c <= d Minore o uguale a Verifica se c è minore o uguale a d.
> a > b Più grande di Verifica se a è maggiore di b.
>= c >= d Maggiore o uguale a Verifica se c è maggiore o uguale a d.
== i == j equivale Verifica se i è uguale a j.
!= a != 0 Non uguale a Verifica se a non è uguale a zero.

"Li uso già tutti."

"E qual è la differenza principale tra questi operatori e gli operatori matematici?"

"Se sommiamo due numeri, otteniamo un numero; ma, se confrontiamo due numeri, otteniamo vero o falso."

"Esatto. Il risultato di un confronto è un valore di " valore logico ", che, come sai, è rappresentato dal tipo booleano. Ci sono due possibilità: vero o falso.

"Sì, è tutto chiaro. Lo so già."

3) " Operatori logici "

Simbolo Esempio Nome Descrizione (cosa fa)
&& a && b E Il risultato dell'espressione è vero solo quando sia a che b sono veri.
|| c || d O Il risultato dell'espressione è vero se a o b è vero. Tutti e due o almeno uno.
! !a NON Il risultato dell'espressione è vero solo se a è falso.

"Gli operatori logici possono essere utilizzati solo con variabili o espressioni booleane."

Esempio Descrizione
boolean a = true;
boolean b = true;if (a && b)
La condizione if è vera se entrambi i valori sono veri
In altre parole, se entrambi a e b sono veri, allora il risultato è vero .
boolean a = true;
boolean b = false;if (a || b)
La condizione if è vera se almeno un valore è vero
In altre parole, se a o b è vero, allora il risultato è vero .
boolean b = false;

if (!b)

La condizione if è vera se b non è vero.
In altre parole, se   b è false , il risultato è  true .
int a = 2, b = 3, c = 4;

if (a < b && a < c)
if ((a < b) && (a < c))

Se a è minore di b e a è minore di c, il risultato dell'espressione è vero.
a, b e c sono numeri interi, ma il risultato del confronto tra numeri interi è un valore logico (vero, falso), il che significa che possiamo usare operatori logici.

"So già tutto questo."

"Davvero? Andiamo avanti, allora."

4) " Operatori bit a bit "

Simbolo Esempio Nome Descrizione (cosa fa)
& a & b E AND a bit
| c | d O OR bit a bit
~ ~a NON Bit a bit NON
^ a ^ b XOR Bitwise "OR ESCLUSIVO"

" Gli operatori bit per bit eseguono operazioni bit per bit su numeri interi."

"Che cos'è?"

"Ogni numero è rappresentato come un insieme di bit, quindi il risultato viene calcolato come segue:"

"Se il primo bit di entrambi i numeri è 1, il primo bit del risultato sarà 1."

"Se il secondo bit di entrambi i numeri è 1, il secondo bit del risultato sarà 1. E così via."

"È vero per tutti gli operatori bit a bit?"

"È molto più semplice di così. Un bit può avere solo due valori, 0 e 1, giusto?"

"Giusto."

"Quindi pensa a 1 come vero e 0 come falso. Le operazioni sui singoli bit saranno quindi quasi identiche alle operazioni logiche:"

Espressione logica Espressione bit per bit
vero && vero == vero 1&1 == 1
vero && falso == falso 1&0 == 0
vero || vero == vero 1|1 == 1
vero || falso == vero 1|0 == 1
falso || falso = falso 0|0 == 0
!falso == vero ~0 == 1
!vero == falso ~1 == 0

"Oh! È così facile."

"Sì, ma non dimenticare che le operazioni bit a bit utilizzano i bit corrispondenti di due numeri."

"Sì, ricordo: il primo bit di un numero è accoppiato con il primo bit del secondo, e anche il risultato è scritto nel primo bit. E lo stesso vale per il resto dei bit."

"Esatto. Hai altre domande?"

"Che cos'è XOR e 'esclusivo o'?"

"È un gioco da ragazzi: quando i valori sono diversi, è vero; quando sono uguali, è falso."

Espressione logica Espressione bit per bit
vero XOR vero == falso 1 ^ 1 == 0
falso XOR falso == falso 0 ^ 0 == 0
vero XOR falso == vero 1 ^ 0 == 1
falso XOR vero == vero 0 ^ 1 == 1

Ecco un altro paio di esempi di operazioni bit a bit:

Esempio Numeri come bit Risultato come bit Risultato
5 & 3 0000010 1  e 0000001 1 0000000 1 1
7 & 2 000001 1 1 e 000000 1 0 00000010 2
5 | 9 00000 1 0 1  | 0000 1 00 1 00001101 13
5 ^ 9 00000 101  ^ 00001001 0000 1100 12
~9 ~ 00001001 11110110 246

"Grazie, Bilaabo. Adesso lo so."

"C'è un altro gruppo di operatori bit per bit, gli operatori di spostamento:"

5) " Operatori di turno "

Simbolo Esempio Nome Descrizione (cosa fa)
>> a >> b spostamento a destra Sposta i bit del numero a a destra di b cifre.
<< c << d tasto maiuscolo di sinistra Sposta i bit del numero c a sinistra di d cifre.
>>> a >>> 2 spostamento a destra senza segno Sposta i bit del numero a a destra di 2 cifre.

"Che tipo di magia di strada è questa?"

"In realtà è tutto molto semplice. Dai un'occhiata:"

Esempio Numeri come bit Risultato come bit Risultato
10 >> 1 0000 101 0 >> 1 00000 101 5
10 >> 2 0000 101 0 >> 2 000000 10 2
10 << 1 0000 101 0 << 1 000 101 00 20
10 << 2 0000 101 0 << 2 00 101 000 40

"Spostare i bit di un numero a sinistra di 1 equivale a moltiplicare il numero per 2. Lo spostamento di due cifre equivale alla moltiplicazione per 4, per tre cifre — moltiplicazione per 8 e così via."

"Lo spostamento a destra corrisponde alla divisione per 2, 4, 8, 16, ecc."

"Ma qual è la differenza tra gli operatori >>> e >>?"

"Differiscono quando si lavora con numeri negativi. Questo perché  i numeri con segno usano il bit più a sinistra per indicare il segno. Di conseguenza, un numero negativo cessa di essere negativo quando si sposta a destra. Quindi, hanno escogitato due diversi operatori. Controlla:"

Espressione Risultato Descrizione
1 000 1010 >> 1 11 000 101 Il numero negativo rimane negativo.
Per i numeri negativi, i bit in entrata sono riempiti con 1.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 Il numero negativo non è più negativo. Per i numeri negativi, i bit in ingresso sono riempiti con 0.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

"Lo spostamento non è ciclico. I bit che si spostano oltre il bordo sinistro o destro del numero vengono semplicemente scartati."

6) " Operatori di assegnazione "

"So già cos'è l'incarico. Ma perché dici 'operatori'?"

"Perché ce ne sono molti ☺"

Operatore Cosa significa
a += b; a = a + b;
a -= b; a = a - b;
a *= b; a = a * b;
a %= b; a = a % b;
a |= b; a = a | b;
a &= b; a = a & b;

"Penso che tu abbia capito la logica."

7) " Operatori di incremento e decremento "

Notazione Esempio Descrizione
++ a++;
++b;
Aumenta il numero di 1.
-- d--;
--i;
Diminuisce il numero o la variabile di 1.

"C'è differenza tra mettere i due segni meno prima o dopo la variabile?"

"Sì, c'è, anche se non molto grande. Se una variabile con uno di questi operatori fa parte di un'espressione o di un'assegnazione, allora ci sono delle differenze. Preferirei mostrartelo con un esempio:"

Esempio Cosa succede davvero Descrizione
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
a viene prima incrementato di 1, quindi viene utilizzato nell'espressione.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
a viene prima utilizzato nell'espressione, quindi aumenta di 1.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
La funzione restituirà 3, ma il valore di a verrà aumentato di 1.
int x = 5;
x = ++x + ++x;
int x = 5;
int a = x + 1;// The first term is 6
x = a;
int b = x + 1;// The second term is 7
x = b;
x = a + b;
Il risultato qui è 13. Innanzitutto, x aumenterà di 1 e questo valore sostituirà il primo termine, quindi x aumenterà nuovamente di 1.

"Wow! Fantastico!"

"Sono contento che ti sia piaciuto. Ma se non c'è espressione o assegnazione, allora non ci sono differenze:"

"x++ è equivalente a x = x + 1."

"++x è equivalente a x = x + 1."

"Lo terrò a mente. Grazie, Bilaabo."

8)  " Operatore ternario "

"Questo operatore non utilizza solo una o due variabili o espressioni. Utilizza tre variabili o espressioni contemporaneamente:"

Notazione Codice equivalente:
a ? b : c; if (a)
b
else
c
int min = a < b ? a : b; if (a < b)
min = a;
else
min = b;
return a != null ? a.length : 0; if (a != null)
return a.length;
else
return 0;

"Beh, è ​​super conveniente."

"Sì. Ed è compatto e il codice è leggibile. Divertiti ad usarlo!"

9) " Altro "

"Non importa quanto sia ben organizzata la tua raccolta musicale, devi comunque creare una cartella "Varie"".

"Sì, chiunque abbia mai dovuto classificare la musica sarebbe totalmente d'accordo."

"Quindi, ci sono altri tre operatori di cui voglio parlarvi:"

Notazione Esempio Descrizione
() (a + b) * c Le parentesi aumentano la precedenza degli operatori.
Le cose tra parentesi vengono eseguite per prime.
[] c [i] = c [i + 1]; Ottenere un elemento dell'array per indice.
. int n = a.length; L'" operatore punto " accede alle variabili e ai metodi di un oggetto.

"E, infine, ecco una tabella che riassume la precedenza degli operatori:"

Operatori Esempi
Massima precedenza (gli operatori vengono eseguiti in base al loro ordine in questa tabella)
()
[]
.
(a + b)
c [i] = c [i] + 1
++
--
~
!
+
-
i++; ++i;
--j; a--;
~c
!f
return +a;
return -a;
*
/
%
a * b
c / d
a % b
+
-
a + b
c - d
String s = "count"+"35";
>>
<<
>>>
a >> 3
b << 2
c >>> 3
<
<=
>
>=
a < b
a <= b
c > b
c >= b
==
!=
a == 3
a != 0
& a & 7
^ a ^ b
| a | b
&& (a < b) && (a < c)
|| (b != 0) || (c != 0)
? : = a > 0 ? a : -a;
=
*=, /=, %=
-=, +=
<<=. >>=, >>>=
&=, ^=. |=
Priorità più bassa (eseguita per ultima)