Teorie: Operatori și Priorități în C++
Operatori aritmetici, relaționali, logici și la nivel de bit. Regulile de precedență și asociativitate.
Operatori și Priorități în C++
În C++, un operator este un simbol care indică compilatorului să efectueze anumite manipulări matematice sau logice. Limbajul dispune de o gamă largă de operatori pe care trebuie să îi cunoști foarte bine, mai ales prioritățile (ordinea în care se evaluează) și asociativitatea lor.
1. Categorii Principale
Operatori Aditivi
Efectuează operații matematice de adunare și scădere.
+(Adunare): Se aplică pe numere întregi și reale.-(Scădere): Se aplică pe numere întregi și reale.
Operatori Multiplicativi
Efectuează operații matematice de înmulțire și împărțire.
*(Înmulțire): Calculează produsul a două numere./(Împărțire): Pentru numere întregi returnează câtul împărțirii întregi (ex: 5/2 dă 2). Pentru numere reale returnează rezultatul exact (ex: 5.0/2.0 dă 2.5).%(Modulo): Returnează restul împărțirii a două numere întregi (ex: 5%2 dă 1). Nu se poate aplica pe numere cu zecimale!
Operatori Relaționali și de Egalitate
Compară două valori și returnează un rezultat boolean (adevărat=1, fals=0).
<(Mai mic),>(Mai mare)<=(Mai mic sau egal),>=(Mai mare sau egal)==(Egalitate): Verifică dacă două valori sunt egale. A nu se confunda cu=(atribuire)!!=(Diferit): Verifică dacă două valori sunt inegale.
Operatori Logici
Folosiți pentru combinarea mai multor condiții relaționale.
&&(ȘI Logic): Adevărat doar dacă AMBELE condiții sunt adevărate.||(SAU Logic): Adevărat dacă CEL PUȚIN O condiție este adevărată.!(NEGAȚIE Logică): Schimbă valoarea de adevăr (adevărat devine fals, fals devine adevărat).
2. Prioritățile Operatorilor
Prioritatea (precedența) determină ordinea în care operatorii sunt evaluați într-o expresie fără paranteze. Operatorii cu prioritate mai mare sunt evaluați primii.
| Nivel Prioritate | Operatori | Asociativitate |
|---|---|---|
| 1 (cea mai mare) | () [] . | Stânga-Dreapta |
| 2 | ! ++ -- (tip) | Dreapta-Stânga |
| 3 | * / % | Stânga-Dreapta |
| 4 | + - | Stânga-Dreapta |
| 5 | < <= > >= | Stânga-Dreapta |
| 6 | == != | Stânga-Dreapta |
| 7 | && | Stânga-Dreapta |
| 8 | || | Stânga-Dreapta |
| 9 | = += -= *= /= | Dreapta-Stânga |
Capcană la Bacalaureat
Atenție la combinarea operatorilor logici cu cei relaționali și aritmetici, dar și la operatorul MODULO (%).
// 1. Modulo NU se poate aplica pe float/double!
float x = 5.5 % 2; // Eroare de compilare!
// 2. Evaluarea scurtcircuitată a expresiilor logice
int a = 0, b = 5;
if (a != 0 && b/a > 1) // NU dă eroare!
/* Dacă 'a != 0' este FALS, partea a doua (b/a) NU se mai evaluează, prevenind eroarea de împărțire la zero (Short-circuit evaluation). */