Operatori în C++
Un operator este un simbol (uneori un cuvânt) care indică o operație efectuată asupra uneia sau mai multor valori, numite operanzi.
După numărul de operanzi asupra cărora acționează, operatorii se împart în unari (un operand, de exemplu -x), binari (doi operanzi, de exemplu a + b) și ternari (trei operanzi). Îi vom grupa mai jos după rolul lor.
Operatori aritmetici
Operatorii aritmetici efectuează calcule între numere:
+adunare,-scădere;*înmulțire,/împărțire;%restul împărțirii întregi (modulo).
(a + b) / 2 // media aritmetica a doua numere
10 + 7 - 12 // se respecta ordinea operatiilor din matematica
Pentru două numere întregi, operatorul / face împărțire întreagă: 10 / 3 dă 3, nu 3.33. Pentru un rezultat zecimal este nevoie de o conversie de tip.
Operatorul % este surprinzător de util: cu el aflăm rapid proprietăți ale unui număr întreg.
a % 2 // 0 daca a este par, 1 daca este impar
a % 10 // ultima cifra a lui a
a / 10 % 10 // penultima cifra a lui a
Operatori relaționali
Operatorii relaționali compară două valori și produc un rezultat logic (true sau false):
<mai mic,<=mai mic sau egal;>mai mare,>=mai mare sau egal;==egal,!=diferit.
Atenție la diferența dintre = (atribuire) și == (comparare). a = 5 pune valoarea 5 în a, în timp ce a == 5 verifică dacă a este egal cu 5. Confuzia dintre ele este una dintre cele mai frecvente greșeli.
Operatori logici
Operatorii logici combină condiții:
!negația (schimbă adevărat în fals și invers);&&conjuncția (ȘI): adevărată doar dacă ambele condiții sunt adevărate;||disjuncția (SAU): adevărată dacă cel puțin una dintre condiții este adevărată.
(a >= 9) && (a <= 20) // adevarat daca a este in intervalul [9, 20]
(a < 0) || (a > 100) // adevarat daca a este in afara intervalului [0, 100]
A nega o condiție compusă înseamnă a o înlocui cu opusul ei: !(a > 5 && a < 10) este echivalent cu a <= 5 || a >= 10. Această regulă ne ajută să rescriem condițiile mai simplu.
Operatorul de atribuire și formele compuse
Operatorul = atribuie unei variabile valoarea unei expresii:
x = a + b;
Atunci când modificăm o variabilă folosind chiar valoarea ei, putem scrie mai pe scurt, cu un operator de atribuire compusă:
x += 7; // echivalent cu x = x + 7
x -= 3; // x = x - 3
x *= 2; // x = x * 2
x /= 5; // x = x / 5
x %= 2; // x = x % 2
Operatorii de incrementare și decrementare
Operatorii ++ și -- cresc, respectiv scad cu 1 valoarea unei variabile. Sunt foarte folosiți la contoare:
k++; // echivalent cu k = k + 1
k--; // echivalent cu k = k - 1
Acești operatori pot fi scriși înainte (++k) sau după (k++) variabilă. Diferența contează doar când folosim valoarea în aceeași expresie: k++ folosește valoarea curentă și abia apoi crește, iar ++k crește mai întâi și apoi folosește noua valoare.
Operatorul ternar
Operatorul ternar ?: este singurul care lucrează cu trei operanzi. Îl putem privi ca pe o instrucțiune de decizie scrisă pe o singură linie:
conditie ? valoare_daca_adevarat : valoare_daca_fals
De exemplu, următoarele două secvențe afișează același lucru, cel mai mare dintre a și b:
if (a > b) cout << a;
else cout << b;
// echivalent, cu operatorul ternar:
cout << (a > b ? a : b);