Lectia 9

Operatori de atribuire

Operatorii de atribuire sunt operatori binari care permit modificarea valorii unei variabile. Limbajul C++ are un singur operator de atribuire simplu (=) şi 10 operatori de atribuire compuşi cu ajutorul operatorului de atribuire simplu.

Operaţia de atribuire simplă are următoarea sintaxă:

variabilă = expresie;

Efect:

· se calculează valoarea expresiei şi se obţine un rezultat;

· rezultatul se memorează la adresa variabilei.

· Efectul acestei operaţii este întotdeauna de la dreapta la stânga

Atenţie!

· A nu se confunda operaţia de atribuire cu operaţia matematică desemnată prin acelaşi simbol ”=”. De exemplu daca avem declaraţia int a=10, operaţia a=a+1; în informatică este perfect corectă si are ca semnificaţie schimbarea valorii variabilei a la valoarea 11. Din punct de vedere matematic relaţia a=a+1 este o relaţie gresită.

Operaţia de atribuire compusă are următoarea sintaxă:

variabilă operator = expresie;

unde operatorul aparţine mulţimii {*, /, %, +, -, <<, >>, &, |, ^}.

Expresia din partea dreaptă a semnului ”=” poate fi la rândul ei tot o operaţie de atribuire, cu alte cuvinte se pot scrie operaţii de atribuire înlănţuite respectând următoarea sintaxă:

variabilă_1=variabila_2=...=variabila_n=expresie;

Exemplu:

Fie două variabile a=30 şi b=2 de tip întreg int atunci:

Operatorul de incrementare şi de decrementare

Operatorii de incrementare/ decrementare sunt operatori unari care au drept scop cresterea/micşorarea valorii unei variabile cu 1.

Operator

++

--

Denumire

incrementare

decrementare

Forma generala de uitlizare a acestor operatori este:

Operatori condiţionali

Operatorii condiţională sunt ”?” şi ”:” şi se utilizează numai împreună. Sintaxa generală a unei expresii condiţionale este:

expresie_1 ? expresie_2 : expresie_3

Efect:

· se evaluează expresie_1.

· Dacă expresie_1 are o valoare diferită de 0 atunci valoarea expresiei condiţionale este egală cu valoarea expresiei_2.

· Dacă expresie_1 are o valoare egală cu 0 atunci valoarea expresiei condiţionale este egală cu valoarea expresiei_3.

Exemplu: expresia x<y ? x : y determină valoarea minimă dintre x şi y.

Operatorul de adresă(referinţă)

Este un operator unar care permite determinarea adresei zonei de memorie în care este stocată o variabilă. Acest operator este & si se utilizează după următoarea sintaxă generală:

&variabilă

Operatorul de conversie explicită

Operatorul de conversie implicită este un operator unar care permite conversia fortată a tipului unei expresii la un tip specificat. Forma generală este:

(tip nou)expresie

Exemplu:

    1. Dacă considerăm două variabile de tip întreg int a=20 si b=15 si dorim să calculăm media aritmetică dintre cele două variabile scriem:

(float) (a+b)/2 rezultatul expresiei fiind 17.5

În lipsa conversiei rezultatului operatorul / va calcula câtul împartirii sumei (a+b) la doi

iar rezultatul obtinut va avea valoarea 14.

    1. Daca considerăm variabila de tip int a=70 si dorim să calculăm valoarea expresiei a*1000 rezultatul obţinut va depăşi limita superioară admisă tipului int, adica 32767 si rezultatul afişat va eronat şi va avea valoarea 4464. Pentru a obţine rezultatul corect atunci rezultatul expresiei date trebuie fortate la tipul long si astfel expresia dată îşi va modifica forma astfel : (long)a*1000

Operatorul de determinare a dimensiunii unei variabile sau expresii

Operatorul de determinare a dimensiunii în octeţi a unei variabile sau a unei expresii necesare memorării acesteia este sizeof. Forma generală este:

sizeof(tip) sau sizeof(expresie)

Exemplu: Daca avem o variabilă de tip int a=70, o variabilă b de tip float şi o variabila c de tip char atunci:

Evaluarea expresiilor

Evaluarea unei expresii presupune determinarea valorii acelei expresii, prin înlocuirea în expresie a fiecărei variabile cu valoarea ei şi a fiecărei funcţii cu valoarea returnată de funcţia respectivă şi efectuarea operaţiilor precizate de operatori. În evaluarea unei expresii se ţine cont de :

· Existenţa parantezelor

· Asociativitate

· Prioritatea operatorilor

Etape în evaluarea unei expresii:

    • Se vor calcula în primul rând expresiile din interiorul parantezelor, începând cu cele mai interioare

    • În situaţia în care avem o expresie fără paranteze atunci ordinea de evaluare este dată de prioritatea operatorilor folosiţi

    • În cazul în care avem mai multi operatori de aceiaşi prioritate , se va ţine cont de asociativitatea operatorilor.

În limbajul C++ operatorii se vor asocia de la stânga la dreapta, excepţie făcând operatorul de atribuire, operatorii unari şi condiţionali care se asociază de la dreapta la stânga. În situaţia în care operanţii nu au acelaşi tip, atunci pe parcursul evaluării expresiei se vor realiza în mod automat o serie de conversii implicite de tip după urmatoarea regulă: „operandul care are un domeniu de valori mai mic va trece în urma conversiei implicite la tipul operandului care are cel mai mare domeniu de valori”.

Tabelul cu prioritatea tuturor operatorilor