CATEGORII DOCUMENTE |
OPERATORI SI EXPRESII
Operatorii sunt 'verbele' limbajului C, iar operanzii sunt 'obiectele' asupra carora actioneaza aceste verbe. Expresiile sunt constructii sintactice alcatuite din operanzi si operatori potrivit unor reguli sintactice precise. Exista patru tipuri importante de expresii:
expresii constante, care contin drept operanzi doar constante. Aceste
expresii pot fi evaluate la compilare si se pot folosi in orice loc @n care
poate aparea o
5
5 + 6 * 3 /13.0
'a'
expresii intregi, care in urma tuturor conversiilor implicite si explicite produc drept rezultat o valoare intreaga. Daca j si k sunt intregi, atunci urmatoarele expresii sunt expresii intregi:
k
j * k
k / j - 4
j - 'b'
2 + (int) 6.0
expresii reale, care in urma tuturor conversiilor implicite si explicite produc drept rezultat o valoare reala. Daca x este un real, atunci urmatoarele expresii sunt expresii reale:
x
x + 3
3.0
3.0 - 2
3 + (float) 4
expresii pointer, care se evalueaza la o valoare de tip pointer. Aceste expresii contin variabile pointer, operatorul &, siruri de caractere si nume de vectori. Daca p este un pointer si j este un intreg, atunci urmatoarele expresii sunt expresii pointer:
p
'abc'
&j
(char *)0x000fffff
p + 1
Operatorii se caracterizeaza prin doua proprietati: precedenta (prioritate) si asociativitate. Ambele proprietati afecteaza modul in care operanzii sunt legati la operatori.
Operatorii cu precedenta mai mare se evalueaza inaintea celor cu procedenta mai mica, indiferent de ordinea in care apar. Spre exemplu, operatorul de inmultire are precedenta mai mare deca`t cel de adunare, astfel ca expresiile aritmetice urmatoare:
2 + 3 * 4
3 * 4 + 2
se evalueaza la 14.
In cazurile in care operatorii au aceeasi precedenta, ordinea de evaluare se face in functie de asociativitate. Putem avea asociativitate stanga si asociativitate dreapta. Spre exemplu, operatorii de scadere si adunare sunt asociativi la stanga, astfel ca expresiile:
a + b + c
a - b - c
se grupeaza in subexpresii ca in figura 3.
In schimb, operatorul de atribuire = este asociativ la dreapta, astfel ca expresia:
a = b = c
se grupeaza in subexpresii ca in figura 4.
Figura 3.Descompunerile expresiilor a + b + c, respectiv a - b - c
Figura 4.Descompunerea expresiei a = b = c
Indicarea explicita a ordinii de evaluare se face cu ajutorul parantezelor.
In cazul operatorilor binari, este foarte important sa se stie ca limbajul C nu specifica ordinea in care se evalueaza operanzii operatorului respectiv. Fie spre exemplu instructiunea:
x = j * j ++;
Ordinea de evaluare a operanzilor j si j++ ai operatorului * depinde de implementare. Presupuna`nd ca j = 5 si ca operandul sta`ng se evalueaza primul, rezultatul va fi 26. Daca insa j = 5 si operandul drept se evalueaza primul, rezultatul va fi 30. Cauza acestui comportament eronat este prezenta operatorului ++ care provoaca un efect lateral si anume modificarea lui j. Pentru prevenirea erorilor datorate efectelor laterale se recomanda respectarea urmatoarei reguli: daca o expresie contine un operator ce provoaca un efect lateral, variabila afectata nu mai trebuie folosita in alt loc in cadrul expresiei respective.
Operatorii limbajului C se impart in urmatoarele clase:
operatori aritmetici
Denumire |
Simbol |
Utilizare |
Semnificatie |
minus unar inmultire impartire rest (modulo) adunare scadere postincrementare postdecrementare preincrementare predecrementare |
x x * y x / y x % y x + y x y x x ++ x x |
x cu semn schimbat x inmultit cu y x impartit la y restul impartirii lui x la y x plus y x minus y preia x si incrementeaza x preia x si decrementeaza x incrementeaza x si preia x decrementeaza x si preia x |
operatori logici si relationali
Denumire |
Simbol |
Utilizare |
Semnificatie |
strict mai mare strict mai mic mai mare sau egal mai mic sau egal egal diferit si logic sau logic nu logic |
> < >= <= && |
x > y x < y x >= y x <= y x == y x != y x && y x y ! x |
adevarat daca x e strict mai mare ca y, altfel fals adevarat daca x e strict mai mic ca y, altfel fals adevarat daca x e mai mare sau egal cu y, altfel fals adevarat daca x e mai mic sau egal cu y, altfel fals adevarat daca x este egal cu y, altfel fals adevarat daca x este diferit de y, altfel fals adevarat daca x este adevarat si y este adevarat, altfel fals adevarat daca x este adevarat sau y este adevarat, altfel fals adevarat daca x este fals, altfel fals |
operatori pentru prelucrari la nivel de bit
Denumire |
Simbol |
Utilizare |
Semnificatie |
deplasare dreapta deplasare stanga si la nivel de bit sau la nivel de bit sau exclusiv la nivel de bit complement bit cu bit |
>> << & |
x >> y x << y x & y x y x ^ y x |
x deplasat la dreapta cu y biti x deplasat la sta`nga cu y biti si bit cu bit intre x si y sau bit cu bit intre x si y sau exclusiv bit cu bit intre x si y complement bit cu bit al lui x |
operatori de atribuire
Denumire |
Simbol |
Utilizare |
Semnificatie |
atribuire adunare - atribuire scadere - atribuire inmultire - atribuire impartire - atribuire rest - atribuire deplasare dreapta - atribuire deplasare sta`nga - atribuire si la nivel de bit - atribuire sau la nivel de bit - atribuire sau exclusiv la nivel de bit - atribuire |
>>= <<= &= |
x = y x += y x = y x * y x /= y x %= y x >>= y x <<= y x &= y x = y x ^= y |
depune valoarea lui y in x depune valoarea lui x + y in x depune valoarea lui x y in x depune valoarea lui x * y in x depune valoarea lui x / y in x depune valoarea lui x % y in x depune valoarea lui x >> y in x depune valoarea lui x << y in x depune valoarea lui x & y in x depune valoarea lui x ½ y in x depune valoarea lui x ^ y in x |
operatori pentru lucrul cu adrese
Denumire |
Simbol |
Utilizare |
Semnificatie |
adresa lui dereferentiere indiciere vector selectie ca`mp structura sageata dreapta |
& as -> |
&x *x xays x y x -> y |
adresa lui x valoarea obiectului cu adresa memorata in x al y-lea element al vectorului x valoarea campului y al structurii x valoarea ca`mpului y al structurii cu adresa egala cu valoarea lui x |
alti operatori
Denumire |
Simbol |
Utilizare |
Semnifica_ie |
secventiere cast dimensiune conditional apel de functie |
(tip) sizeof |
x,y (tip)x sizeof(x) x y : z x |
evalueaza x, evalueaza y, rezultatul este valoarea lui y converteste pe x la 'tip' numarul de octeti alocati tipului sau expresiei x daca x e adevarat rezultatul e valoarea lui y, altfel e valoarea lui z apel al functiei lui x |
Tabelul urmator ilustreaza operatorii limbajului C, in ordine descrescatoare precedentei lor:
Operatori |
Asociativitate |
as |
sta`nga la dreapta |
(tip) operatorul cast sizeof * dereferentiere & adresa lui - + unari ++ ! |
sta`nga la dreapta |
* inmultire / % |
sta`nga la dreapta |
+ - binari |
stanga la dreapta |
<< >> |
sta`nga la dreapta |
< <= > >= |
sta`nga la dreapta |
!= |
sta`nga la dreapta |
& si la nivel de bit |
sta`nga la dreapta |
sta`nga la dreapta |
|
sta`nga la dreapta |
|
&& |
sta`nga la dreapta |
stanga la dreapta |
|
: |
dreapta la sta`nga |
+= -= *= /= %= >>= <<= &= ^= |
dreapta la sta`nga |
sta`nga la dreapta |
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1152
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved