Precedența operatorului - 1

— Bună, Bilaabo!

„Bilaabo este bucuros să-și salute prietenul!”

"Astăzi, Bilaabo vă va spune despre prioritatea operatorilor. Dar mai întâi vă va spune despre operatorii înșiși."

„Care sunt acești operatori despre care vorbești?”

„De fapt, ești deja familiarizat cu ei. Poate că nu știai că se numesc operatori”.

„De exemplu, să presupunem că avem expresia  c = a + b;

„Are doi operatori: un operator de adăugare și un operator de atribuire”.

"Cu alte cuvinte, operatorii sunt doar semne matematice? Ca înmulțirea, împărțirea și adunarea?"

"Da, este adevărat. Cu toate acestea, există diferențe."

"Nu voi defini operatori pentru tine: o definiție nu te va face mai inteligent. Este mai bine să-i vezi în acțiune. Operatorii pot fi împărțiți în mai multe grupuri, pe care le vom examina acum."

1) " Operatori matematici "

Simbol Exemplu Nume Descriere (ce face)
+ a + b Operator de adaos Operator de adaos.
- c - d Operatorul de scădere Scade al doilea număr din primul.
* a * t Operator de multiplicare Înmulțește două numere.
/ a / b Operator de divizie Împarte primul număr la al doilea.
% c % d Împarte primul număr la al doilea. Calculează restul după împărțirea primului număr la al doilea.
- -a Minus unar Schimbă semnul variabilei în opusul său.
Plus la minus și minus la plus.
+ +a Plus unar Nu schimba nimic. Aceasta a fost adăugată pentru a complimenta operatorul unar minus. E doar pentru aspect.

"Le recunosc de la școală. Firmware-ul meu include cursuri școlare."

— Dar, ce-i cu acel semn de procente, un fel de vrăjitorie?

„Este operatorul „ restul după împărțire ”. Dacă 11 este împărțit la 5, atunci obținem 2 și un rest de 1. Acest 1 poate fi obținut scriind 11 % 5;”

"Când împărțiți numere întregi în Java, rezultatul este, de asemenea, un număr întreg. Restul din operația de împărțire este pur și simplu ignorat. Dacă împărțim 8 la 5, obținem 1."

Expresie Rezultat
19 / 10 1 Dacă împărțim 19 la 10, rezultatul este 1 cu un rest de 9.
19 % 10 9 Dacă împărțim 19 la 10, rezultatul este 1 cu un rest de 9.
2 / 5 0 Dacă împărțim 2 la 5,  rezultatul este 0 cu un rest de 2.
16 % 2 0 Dacă împărțim 16 la 2, rezultatul este 8 cu restul de 0.

— Dar pentru ce naiba avem nevoie de restul?

„Să presupunem că trebuie să verificați dacă un număr întreg este par. Apoi puteți scrie:”

if (a % 2 == 0)

„Și dacă trebuie să verificați dacă b este impar, atunci puteți scrie:”

if (b % 2 == 1)

„Sau pentru a verifica dacă d este divizibil cu 3:”

if (d % 3 == 0)

— Interesant. Îmi voi aminti asta.

2)  " Operatori de comparație "

Simbol Exemplu Nume Descriere (ce face)
< a < b Mai puțin decât Verifică dacă a este mai mic decât b.
<= c <= d Mai mic sau egal cu Verifică dacă c este mai mic sau egal cu d.
> a > b Mai mare ca Verifică dacă a este mai mare decât b.
>= c >= d Mai mare sau egal cu Verifică dacă c este mai mare sau egal cu d.
== i == j egală Verifică dacă i este egal cu j.
!= a != 0 Nu este egal cu Verifică dacă a nu este egal cu zero.

„Deja folosesc toate astea”.

„Și care este principala diferență între acești operatori și operatorii matematici?”

„Dacă adunăm două numere, obținem un număr; dar, dacă comparăm două numere, obținem adevărat sau fals.”

„Așa este. Rezultatul unei comparații este o valoare „ valoare logică ”, care, după cum știți, este reprezentată de tipul boolean. Există două posibilități: adevărat sau fals.

"Da, totul este clar. Știu asta deja."

3) " Operatori logici "

Simbol Exemplu Nume Descriere (ce face)
&& a && b ȘI Rezultatul expresiei este adevărat numai atunci când a și b sunt adevărate.
|| c || d SAU Rezultatul expresiei este adevărat dacă a sau b este adevărat. Amandoi sau cel putin unul.
! !a NU Rezultatul expresiei este adevărat numai dacă a este fals.

„Operatorii logici pot fi utilizați numai cu variabile sau expresii booleene.”

Exemplu Descriere
boolean a = true;
boolean b = true;if (a && b)
Condiția if este adevărată dacă ambele valori sunt adevărate.
Cu alte cuvinte, dacă ambele a și b sunt adevărate, atunci rezultatul este adevărat .
boolean a = true;
boolean b = false;if (a || b)
Condiția if este adevărată dacă cel puțin o valoare este adevărată
. Cu alte cuvinte, dacă a sau b este adevărată, atunci rezultatul este adevărat .
boolean b = false;

if (!b)

Condiția if este adevărată dacă b nu este adevărată.
Cu alte cuvinte, dacă   b este fals , atunci rezultatul este  adevărat .
int a = 2, b = 3, c = 4;

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

Dacă a este mai mic decât b și a este mai mic decât c, atunci rezultatul expresiei este adevărat.
a, b și c sunt numere întregi, dar rezultatul comparării numerelor întregi este o valoare logică (adevărat, fals), ceea ce înseamnă că putem folosi operatori logici.

— Știu deja toate astea.

— Serios? Să continuăm, atunci.

4) " Operatori pe biți "

Simbol Exemplu Nume Descriere (ce face)
& a & b ȘI ȘI pe biți
| c | d SAU SAU pe biți
~ ~a NU Pe bit NU
^ a ^ b XOR Pe biți „SAU EXCLUSIV”

Operatorii pe biți efectuează operații bit cu bit pe numere întregi.”

"Ce-i asta?"

„Fiecare număr este reprezentat ca un set de biți, iar apoi rezultatul este calculat după cum urmează:”

„Dacă primul bit al ambelor numere este 1, atunci primul bit al rezultatului va fi 1.”

„Dacă al doilea bit al ambelor numere este 1, atunci al doilea bit al rezultatului va fi 1. Și așa mai departe.”

„Este valabil pentru toți operatorii pe biți?”

"Este mult mai simplu decât atât. Un bit poate avea doar două valori, 0 și 1, nu?"

"Dreapta."

„Atunci, gândiți-vă la 1 ca fiind adevărat și la 0 ca fals. Operațiile pe biți individuali vor fi apoi aproape identice cu operațiile logice:”

Expresie logică Expresie pe biți
adevărat && adevărat == adevărat 1&1 == 1
adevărat && fals == fals 1&0 == 0
adevărat || adevărat == adevărat 1|1 == 1
adevărat || fals == adevărat 1|0 == 1
fals || false = false 0|0 == 0
!false == adevărat ~0 == 1
!adevărat == fals ~1 == 0

"Oh! E atât de ușor."

„Da, nu uitați că operațiunile pe biți folosesc biți corespunzători din două numere.”

"Da, îmi amintesc: primul bit al unui număr este asociat cu primul bit al celui de-al doilea, iar rezultatul este scris și pe primul bit. Și același lucru este valabil și pentru restul biților."

— Așa e. Mai ai și alte întrebări?

„Ce e cu XOR și „exclusiv sau”?”

"Este o bucată de tort: ​​când valorile sunt diferite, este adevărat; când sunt aceleași, este fals."

Expresie logică Expresie pe biți
adevărat XOR adevărat == fals 1 ^ 1 == 0
fals XOR fals == fals 0 ^ 0 == 0
adevărat XOR fals == adevărat 1 ^ 0 == 1
false XOR adevărat == adevărat 0 ^ 1 == 1

Iată încă câteva exemple de operații pe biți:

Exemplu Numerele ca biți Rezultatul ca biți Rezultat
5 & 3 0000010 1  și 0000001 1 0000000 1 1
7 & 2 000001 1 1 și 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

— Mulțumesc, Bilaabo. Acum știu.

„Există încă un grup de operatori pe biți, operatorii de deplasare:”

5) " Operatori de schimb "

Simbol Exemplu Nume Descriere (ce face)
>> a >> b schimbare la dreapta Mută ​​biții numărului a la dreapta cu b cifre.
<< c << d schimbare la stânga Mută ​​biții numărului c la stânga cu d cifre.
>>> a >>> 2 schimbare dreapta nesemnată Mută ​​biții numărului a la dreapta cu 2 cifre.

„Ce fel de magie stradală este asta?”

"De fapt, totul este foarte simplu. Verificați:"

Exemplu Numerele ca biți Rezultatul ca biți Rezultat
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

„Deplasarea biților unui număr la stânga cu 1 este același lucru cu înmulțirea numărului cu 2. Deplasarea cu două cifre este echivalentă cu înmulțirea cu 4, cu trei cifre — înmulțirea cu 8 și așa mai departe.”

„Deplasarea la dreapta corespunde împărțirii la 2, 4, 8, 16 etc.”

"Dar care este diferența dintre operatorii >>> și >>?"

„Ele diferă atunci când lucrează cu numere negative. Acest lucru se datorează faptului că  numerele cu semn folosesc bitul din stânga pentru a indica semnul. Drept urmare, un număr negativ încetează să fie negativ atunci când se deplasează la dreapta. Așadar, au venit cu doi operatori diferiți. Verifică:"

Expresie Rezultat Descriere
1 000 1010 >> 1 11 000 101 Numărul negativ rămâne negativ.
Pentru numerele negative, biții de intrare sunt umpluți cu 1.
1 000 1010 >> 2 111 000 10
1 000 1010 >> 3 1111 000 1
1 000 1010 >>> 1 01 000 101 Numărul negativ nu mai este negativ. Pentru numerele negative, biții de intrare sunt umpluți cu 0.
1 000 1010 >>> 2 001 000 10
1 000 1010 >>> 3 0001 000 1

„Deplasarea nu este ciclică. Biții care se deplasează dincolo de marginea din stânga sau din dreapta a numărului sunt pur și simplu aruncați.”

6) " Operatori de atribuire "

„Știu deja ce este misiunea. Dar de ce spui „operatori”?

„Pentru că sunt mai mulți dintre ei ☺”

Operator Ce înseamnă
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;

— Cred că înțelegi logica.

7) " Operatori de creștere și decrementare "

Notaţie Exemplu Descriere
++ a++;
++b;
Mărește numărul cu 1.
-- d--;
--i;
Reduce numărul sau variabila cu 1.

„Există o diferență între a pune cele două semne minus înainte sau după variabilă?”

"Da, există, deși nu foarte mare. Dacă o variabilă cu unul dintre acești operatori face parte dintr-o expresie sau o atribuire, atunci există diferențe. Aș prefera să vă arăt prin exemplu:"

Exemplu Ce se întâmplă cu adevărat Descriere
int a = 3;
int b = ++a;
int a = 3;
a = a + 1;
int b = a;
a se mărește mai întâi cu 1 și apoi este folosit în expresie.
int a = 3;
int b = a++;
int a = 3;
int b = a;
a = a + 1;
a este folosit mai întâi în expresie și apoi crește cu 1.
int a = 3;
return a++;
int a = 3;
int result = a;
a = a + 1;
return result;
Funcția va returna 3, dar valoarea lui a va fi mărită cu 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;
Rezultatul aici este 13. Mai întâi, x va crește cu 1, iar această valoare va înlocui primul termen, iar apoi x va crește din nou cu 1.

"Uau! E tare!"

"Mă bucur că ți-a plăcut. Dar, dacă nu există o expresie sau o sarcină, atunci nu există diferențe:"

„x++ este echivalent cu x = x + 1.”

„++x este echivalent cu x = x + 1.”

— Voi ţine cont de asta. Mulţumesc, Bilaabo.

8)  „ Operator ternar

„Acest operator nu folosește doar una sau două variabile sau expresii. Folosește trei variabile sau expresii simultan:”

Notaţie Cod echivalent:
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;

— Ei bine, e super convenabil.

"Da. Și este compact și codul este ușor de citit. Folosește-l cu plăcere!"

9)Altele

„Oricât de bine ai organizat colecția ta de muzică, tot trebuie să creezi un folder „Diverse”.

„Da, oricine a trebuit vreodată să clasifice muzica ar fi total de acord.”

„Deci, mai sunt trei operatori despre care vreau să vă spun:”

Notaţie Exemplu Descriere
() (a + b) * c Parantezele cresc prioritatea operatorului.
Lucrurile dintre paranteze sunt executate mai întâi.
[] c [i] = c [i + 1]; Obțineți un element de matrice după index.
. int n = a.length; Operatorul punct ” accesează variabilele și metodele unui obiect.

„Și, în sfârșit, iată un tabel care rezumă prioritatea operatorului:”

Operatori Exemple
Cea mai mare prioritate (operatorii sunt executați în conformitate cu ordinea lor în acest tabel)
()
[]
.
(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;
=
*=, /=, %=
-=, +=
<<=. >>=, >>>=
&=, ^=. |=
Cea mai mică precedență (execută ultima)