Această lecție prezintă operatorii din C++. Pentru operatorii din pseudocod, vezi aici !

Operatori (C++)

Operatorii reprezintă unul sau mai multe caractere (uneori și litere) asociate unor operații care se efectuează într-un algoritm.

  Acești operatori sunt deci niște simboluri care definesc o anumită operație între date. Spre exemplu, în matematică, adunarea a două numere este marcată de semnul „+”.

Este importantă prioritatea operatorilor atunci când se lucrează cu mai multe tipuri. Vezi articolul Prioritatea operatorilor.

Operatorii unari, binari, ternari

  În funcție de numărul de valori asupra cărora operează, operatorii se clasifică în unari, binari, sau ternari.


I. Operatorii aritmetici

1. Multiplicativi

  • înmulțire: * („asterix”)
  • împărțire: / („slash”)
  • restul împărțirii întregi: % („mod”)
2*a //dublul lui a
(a*b)/2 //jumătatea produsului dintre a și b
a%3 //restul împărțirii lui a la 3
10%3 //rezultatul este 1 (10:3=3 rest 1) 

Putem folosi operatorul % pentru a afla mai multe proprietăți despre un număr (paritate, ultima cifră etc.)

a%2  // = 0, dacă a este par
     // = 1, dacă a este impar

a%10  //ultima cifră a lui a
a%100  //ultimele două cifre ale lui a
a/10%10  //penultima cifră a lui a (dacă a este întreg!)

2. Aditivi

  • adunare: + („plus”)
  • scădere: - („minus”)
(a+b)/2 //media aritmetică dintre a și b
10+7-12+3 /*rezultatul este 8 (se respectă ordinea efectuării operațiilor din aritmetică)*/

II. Operatorii relaționali

  • < - strict mai mic
  • <= - mai mic sau egal
  • > - strict mai mare
  • >= - mai mare sau egal
  • == - egalitate
  • != - inegalitate

Exemple

(3 < 6) = true
(7 >= 7) = true
(5 != 5) = false

III. Operatorii logici

1. Negația: !, not

Operatorul de negație schimbă valoarea unui operand cu complementul său. Spre exemplu, orice număr nenul negat va produce valoarea 0 (false).

/*Dacă variabila a are valoarea 18, următoarea expresie are valoarea true*/
!a=0 /*este adevărat, deoarece complementul unei valori true este întotdeauna false*/

De luat aminte că !true=false, iar !false=true.

A nega o expresie se rezumă la a înlocui operatorii logici și relaționali cu complemetul corespunzător.

/*Următoarea expresie este adevărată când variabila a nu aparține intervalului deschis (5,10)*/
!(a>5 și a<10)
/*Echivalentul acesteia eliminând negația este următoarea*/
(a<=5) sau (a>=10)

Complemenții principalilor operatori (relație reciprocă)

Operator Complement
< >=
> <=
= !=
AND OR

2. Conjuncție: AND, &&

Se va returna true atunci când ambii operanzi au valoarea true, în rest valoarea va fi false.

//a=0, b=0
a AND b = false
//a=1, b=0
a && b = false
//a=1, b=1
a && b = true

(a<=20) AND (a>9) /*Adevărat dacă a aparține intervalului (9,20]*/

3. Disjuncție: OR, ||

Se va returna true atunci când cel puțin unul din operanzi are valoarea true, astfel că două valori false vor returna tot false.

//a=0, b=0
a || b = false
//a=1, b=0
a OR b = true
//a=1, b=1
a || b = true

(a>10) || (a<=5) /*Adevărat dacă a aparține intervalului (-∞,5] U (10,+∞)*/

IV. Operatorul de atribuire =

Operatorul de atribuire = este utilizat atunci când vrem să atribuim o valoare unei date:
<variabilă> = <expresie>


Alți operatori

1. Operatorul ternar: ?:

  Operatorul ternar este un operator care are trei argumente. Îl putem considera un „ if liniar”, datorită funcționalității sale.
  Are următoare structură: <condiție> ? <instrucțiuni_true> : <intrucțiuni_false>.

Exemplu: Putem echivala următorul if cu operatorul ternar:

if(a>b) cout<<"a este mai mare";
else cout<<"b este mai mare";

// structura anterioară este echivalentă cu:

a>b ? cout<<"a este mai mare" : cout<<"b este mai mare";

2. Operatorii unari de incrementare / decrementare: ++, --

  Pentru a incrementa un contor k, spre exemplu, vom folosi structura k++, în loc de clasica instrucțiune k = k+1.
  Acești operatori pot fi puși atât în fața, cât și în coada unei variabile. Acest lucru va face o diferență atunci când ne referim la elementul unui tablou unidimensional, astfel că dacă ne referim la elementul V[k++], este vorba de elementul de pe poziția k, urmând ca după terminarea operației în care îl folosim să crească acest k cu 1. În schimb, V[++k] se va referi la elementul de pe poziția k+1, deoarece acesta este crescut înainte de a se executa operația ulterioară.

3. Operatorii de atribuire compusă: +=, -=, *=, /=, ^=, %=

Cu ajutorul acestor operatori, putem simplifica instrucțiunea x = x+7 cu echivalenta sa, x += 7.

4. Operatorul concatenare: +

Reunește două șiruri de caractere și furnizează un singur astfel de șir.

"Buna " + "ziua" = "Buna ziua"
"unt" + "delemn" = "untdelemn"

De remarcat faptul că acest operator nu adaugă de la sine caracterul spațiu, astfel că el trebuie pus manual.

"Targu" + "Jiu" = "TarguJiu"
"Targu" + " Jiu" = "Targu Jiu"
"Targu" + " " + "Jiu" = "Targu Jiu"

5. Operatorul de conversie explicită: (tip_dată)

În cazul în care dorim să realizăm o împărțire reală a unei variabile întregi, putem folosi operatorul de conversie explicită pentru a marca acest lucru.

int x=11;
cout<<x/2;
cout<<(float)(x/2);

Se va afișa următorul lucru:

5
5.5

6. Operatorul adresă: &

Pentru a fi permanente modificările unei date transmise ca parametru, vom folosi operatorul & pentru a marca legătura valorii datei cu zona de memorie atribuită.

int a=10, b=5;
void Exemplu(int a, int&b){
  a=20; b=a;
  cout<<a<<' '<<b<<endl;
}
int main(){
  Exemplu(a,b);
  cout<<a<<' '<<b<<;
  return 0;
}

Executarea va afișa:

20 10
10 10