Sunteți pe pagina 1din 7

Operatori. Operaii.

Operanzi
Expresii = operatori + operanzi
Operatori=semnele care se pun intre operanzi ca sa se efectuieze operatii.
I.Instruciunea de calcul este alctuit din:
nume var = expresie
unde:
- nume var este numele variabilei a crei valoare se modific
- expresie este format din unul sau mai muli operanzi legai ntre ei din punct de vedere
logic de diferii operatori.
- caracterul = reprezint operatorul de atribuire i semnific transferul informaiei
calculate n locaia de memorie atribuit variabilei reprezentate prin identificatorul din
stnga seninului =.
Obs.
Orice expresie are o valoare i un tip n concordan cu tipul operanzilor care
alctuiesc expresia.
Ex 1.

II. Operanzi
Acetia pot fi:
- constante;
- variabile;
- tablouri;
- numele unei funcii;
Ex. 2
int p;
p = 5;

float eps;
eps = p/3;

char t,tablou[10];
t = tablou [0];

Efectuarea instruciunilor de calcul presupune:


- operanzii s fie cunoscui anterior;
- efectuarea calculelor se va face n funcie de prioritile specifice respectivilor operatori
III. Operatori
Tipuri de operatori:
a) - aritmetici,
b) - de atribuire,
c) - de incrementare/ decrementare,

d) - relaionali,
e) - de egalitate,
f) - logici,

Prioritile operatorilor sunt exemplificai astfel:


- n expresii aritmetice,
- n expresii relaionale;
a) Operatori aritmetici:
n funcie de numrul operanzilor cu care se folosesc acetia pot fi de diferite
tipuri:
- unari (+, -, &, *)
- binari (+, -, *, /, %)
Operatorii unari au prioritatea mai mare dect a celor binari. De aceea la
evaluarea unei expresii, SC va ine seama mai nti de semnul variabilelor, iar mai apoi
de operaiile care se execut cu acele variabile). Pentru operatori ordinul de prioritate este
aceeai ca i operaiile din matematica clasic (, /, +, -).
ATENIE:
Operatorul % poate fi aplicat numai n expresii care conin variabile de tip ntreg.
Ex.3
int a,b,c;
float x,y, ,z;
a= 17;
X = 3.14;
b = 39;
Y = 1.4142;
c = a/b;
Z = x+y;
c = a-b;
Z = (-x)*(-y)
c = a%b;
Z = (-y);
c = a*(-b);
b) Operatorul de atribuire
Operatorul de atribuire este folosit pentru a atribui unei variabile valoarea unei
constante sau a unei expresii.
Operatorul de atribuire are prioritatea cea mai mic fa de ceilali operatori.
ATENIE:
Limbajul C/C++ permite alctuirea de instruciuni complexe de forma:
x1=x2=x3=constant;
Operatorul de atribuire care contribuie la alctuirea unei expresii se asociaz de la
dreapta la stnga. Pentru efectuarea corect a expresiei este necesar ca n prealabil
valoarea expresiei din partea dreapt a iniializrii s fie cunoscut.
Exist i posibilitatea folosirii expresiilor de forma:
variabil +=(expresie)
Ex. 4
int i = 0;
i + = 5;
//se va efectua i = (i+5)
Efectuarea acestui tip de expresie se realizeaz astfel:
- se adun 5 la vechea valoare a variabilei i,
- se atribuie lui i noua valoare.

c) Operatori de incrementare/ decrementare


Acetia sunt:
1) ++(op. de incrementare)
2) -- (op. de decrementare)
Operatorii de incrementare/ decrementare sunt operatori de tip unari.
- operatorul de incrementare crete valoarea expresiei asupra creia se aplic cu o
unitate.
Ex. 5
int a;
a = 3;
a++;
// aceasta este echivalent cu: a = (a+1) rezult a = 4
- operatorul de decrementare scade valoarea expresiei asupra creia se aplic cu o
unitate.
Ex. 6
int a;
a = 3;
a--;
//a = (a-l)rezult a = 2;
Aceti operatori pot fi folosii n dou moduri:
- prefixai: (++var)
Ex. 7
int c;
for(c=0;c<5;++c)
printf("\n %d",c); // mai nti se crete valoarea lui c cu o unitate, iar
// mai apoi se face afiare; Rezultatul execuiei buclei
// va fi afiarea valorilor: 1, 2, 3, 4, 5.
-postfixai: (var++)
Ex. 8
for(c=0;c<5;c++) // nti se efectueaz instruciunea din interiorul
cout<<c; // buclei (funcia printf()), iar mai apoi se creste
// valoarea lui c cu o unitate Rezultatul execuiei buclei va
// fi afiarea valorilor: 0, 1,2, 3, 4.
d) Operatori relaionali: Acetia sunt:
- <, >;
Prioritatea operatorilor relaionali este mai mic dect a celor binari. Aceti
operatori se folosesc pentru alctuirea expresiilor relaionale (ex. (x > 5)) Rezultatul
aplicrii unui operator relaional unei expresii este o valoare logic (TRUE/ FALSE),
codificat n limbajul C/C++ prin: TRUE=1 i FALSE=0.
Ex. 9
float a,b;
a= 15,3;
b= 15,31;
Expresia (a < b) are valoarea adevrat (TRUE) i se reprezint n SC prin valoarea 1.
Expresia (a - b) > 0 are valoarea adevrat (FALSE) i se reprezint n SC prin valoarea 0.
Expresia (a - b) <= 1 are valoarea adevrat (TRUE) i se reprezint n SC prin valoarea 1.

e) Operatori de egalitate:
Operatorii de egalitate ~ealizeaz compararea valorilor a dou variabile.
Rezultatul aplicrii unui operator de egalitate asupra unei expresii poate fi una dintre cele
dou valori logice TRUE sau FALSE.
Operatorii de egalitate sunt:
- = = (egalitate),
- ! = (diferit).
Prioritatea operatorilor de egalitate este inferioar celui pentru operatori
relaonali.
Ex. 10
int x,y;
x = 9;
y=11;
Expresia (x = = y) este evaluat la compilare ca fiind 0.
Expresia (x ! = y) este evaluat la compilare ca fiind 1.
f) Operatori logici
Acetia sunt:
- ! (negaia),
- && (I logic),
- || (SAU logic).
Expresiile logice au ca operanzi expresii relaionale, legate prin operatori logici. Acestea
sunt utile n exprimarea domeniului de definiie a unei funcii:
Ex.11
intervalul x apartine [-1,1] poate fi exprimat prin expresia logic
(x>= -1)&&( x<=l)
ATENIE:
Folosirea parantezelor rotunde pentru delimitarea expresiilor relationale este
obligatorie. Ordinea interpretrii expresiilor logice este urmtoarea:
- se evalueaz expresiile care conin operatorul !,
- se evalueaz expresiile care conin operatorul &&,
- se evalueaz expresiile care conin operatorul ||,
- se stabilete valoarea final a expresiei logice care poate fi ADEVRAT sau FALS.
ATENIE:
Operatorul logic not reprezentat prin (!) este de tip unar i are prioritatea maxim
n evaluarea expresiilor.
Operatorul logic && are prioritatea mai mare dect operatorul || n evaluarea
expresiilor.

Aplicarea operatorilor logici direct valorilor variabilelor.


n limbajul C/C++ orice valoare diferit de 0 se consider c reprezint valoarea
logic ADEVRAT. Variabilele care au valoarea zero 0 se considerat c reprezint
valoarea logic FALS.
Ex. 12
S se evalueze expresiile urmtoare care conin variabile negate,
int a;
a= 1;
b = (!a);
// Rezultatul aplicrii operatorului de negare asupra variabilei a determin //
b=0 ( b = FALSE).
Ex. 13
int a,b,c;
a=5;
b=5;
c = ((! (a = = b));
d = (a <= b) || (a > b));

// variabila d va avea valoarea 0 (FALSE)


// variabile c va avea valoarea 1 (TRUE)

Evaluarea expresiilor de forma (a && b) se va face n felul urmtor:


- se compar valorile operanzilor;
- dac cei doi operanzi coincid rezultatul evalurii va fi 1, n caz contrar rezultatul
evalurii va fi 0
Ex. 14
int a,b,x,y;
a = 5; b = 5;
x = (a && b);
// variabile x va avea valoarea 1 (TRUE)
y = (a && (b+1));
// variabila y va avea valoarea 0 (FALSE)
Operatorii logici se evalueaz de la stnga la dreapta. Exist posibilitatea ca n
decursul evalurii unei expresii s se ajung ntr-un punct n care se poate determina
valoarea final pentru ntreaga expresie. n acest caz atunci restul expresiei nu se mai
evalueaz.
Ex. 15 Fie expresia logic:
!a && b || a&&b se evalueaz ((!a) && b) || (a && b)
Pentru a = 5 i b = 5 se evalueaz mai primul operand. ntruct acesta are valoarea
ADEVRAT, ar operatorul este || rezult c nu mai este necesar determinarea valorii
celui de- al doilea operand (a && b).
Obs. Pentru simplificarea urmririi calculelor este recomandat s se separe operatorii
logici prin paranteze.
Expresii care conin operatori de tipuri diferite
ntr-o expresie se pot afla operanzi de tipuri diferite. Pentru a putea efectua
operaii ntre operanzi de tipuri diferite este necesar ca n prealabil s se realizez conversii
de tip. n acest fel operanzii sunt adui la tipul cu prioritate maxim. Aceste operaii sunt
efectuate de ctre SC (fr a fi vizibile pentru utilizator).

Ordinea cresctoare a efecturii conversiilor de tip este urmtoarea:


int
> float > double >longdouble
char

Regulele descresctoare a conversiilor implicite sunt:


a) dac unul dintre operanzi este de tip long double rezult c i cel de-al doilea
operand va fi convertit la tipul long double.
b) dac unul dintre operanzi este de tip double rezult c i cel de-al doilea operand
va fi convertit la tipul double.
c) dac unul dintre operanzi este de tip float rezult c i cel de-al doilea operand va fi
convertit la tipul float.
Obs.
Tipul char este reprezentat intern ca un ntreg (codul ASCII al caracterului
respectiv).
n expresii care conin operatori de tipuri diferite, conversia de tip se aplic
succesiv pentru operatorii care au acelai grad de prioritate.
Ex. 16
float p;
p= 6/5 + 5.0 + 3/4
Va fi interpretat astfel:
- ntruct cei doi operatori sunt de tip ntreg expresia 6/5 va fi evaluat ca fiind de tip
ntreg, deci 6/5 = 1;
- ntruct cei doi operatori sunt de tip ntreg expresia 3/4 va fi evaluat ca fiind de tip
ntreg, deci 3/4 = 0;
- ntruct operatorul 5.0 este de tip float rezult c rezultatele obinute de la cele dou
mpriri (6/5 i 3/4) sunt convertite la tipul real.
- deci p va avea valoarea 6.0, ceea ce evident nu este corect.
g) Operatorul de conversie explicit (operatorul cast)
Pentru evitarea erorilor este util s se foreze schimbarea tipului unui operand sau
a unei expresii. Pentru aceasta se folosete operatorul cast. Acesta este de forma:
(tip conversie) variabil
Operatorul cast este un operator de tip unar. Se definete prin menionarea ntre
paranteze a tipului de dat spre care se foreaz. Acest operator are aceeai prioritate ca i
ceilali operatori unari.
Ex. 17
Ex.18
int x;
int x;
float z;
float z;
x = 5;
x = 5;
z=

x
;
2

z = (float)

x
;
2

Pentru exemplul considerat lipsa conversiei cast float (n primul caz) va conduce
la atribuirea valorii 2 pentru variabila z n loc de 2.5. Aceasta deoarece operandul x are
tipul int i deci rezultatul mpririi va fi convertit la tipul int (dispare partea zecimal). n
final valoarea ntreag 2 va fi convertit la realul 2.0 (n conformitate cu tipul variabilei
z).
Pentru evitarea acestei erori s-a folosit operatorul (float) - ex. 18, dei operatorii
mpririi sunt ntregi, mprirea se va face n numere reale.

S-ar putea să vă placă și