"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;
|
La condizione if è vera se b non è vero. In altre parole, se b è false , il risultato è true . |
int a = 2, b = 3, c = 4;
|
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) |
GO TO FULL VERSION