Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


OPERATORI SI EXPRESII

c



+ Font mai mare | - Font mai mic



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 constanta. Ca`teva exemple de expresii constante sunt:

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



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1055
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved