next up previous contents
Next: Probleme propuse Up: Variabile. Operatori. Expresii Previous: Variabile. Operatori. Expresii   Cuprins


Operatii aritmetice, expresii si operatori specifici limbajului C

Limbajului C ofera o foarte mare libertate programatorului, libertate neîntâlnita în nici un alt limbaj de programare, fapt ce explica popularitatea sa. Aceasta particularitate se reflecta cel mai mult în manipularea tipurilor, deoarece compilatorul de C (spre deosebire de cel de Pascal) nu face verificari referitoare la compatibilitatea tipurilor.

Cea mai evidenta "libertate" se regaseste la tipul caracter (char). Tipul caracater este de fapt un tip întreg reprezentat pe un octet (asemanator cu tipul byte din Pascal). Astfel, secventa urmatoare de cod este perfect legala, acest tip de "artificii" de programare fiind des întâlnite:


int i;
char c;

c='A';
i=c;
printf("codul ASCII al caracterului %c este %d\n",i,i);
i='A'+1;
printf("si urmatorul caracter este %c cu codul %d\n",i,i);



Folosirea descriptorului de format %c specific caracterelor duce la interpretarea variabilei întregi i ca o variabila caracter, si deci la tiparirea caracterului cu codul ASCII egal cu valoarea lui i. De fapt, un caracter este memorat intern prin codul sau ASCII, de aici si tratarea unitara a caracterelor si intregilor.

Un operator foarte folosit în C este operatorul de incrementare ++. Astfel, secventele:

i++;

sau

++i;

sunt echivalente cu:

i=i+1;.

Diferenta între cele doua forme de scriere a operatorului de incrementare (format postfix si format prefix) consta în modul în care se face incrementarea lui i: dupa sau înainte de folosirea valorii variabilei


int i,j,k;

i=5;


k=i++; 
/* dupa aceasta instructiune,
k va avea valoarea 5, iar i 6;
atribuirea are loc inainte de incrementare*/

j=++i;
/* dupa aceasta instructiune,
i va lua valoarea 7, iar j tot 7
atribuirea are loc dupa incrementare*/



În mod analog se comporta si operatorul de decrementare $--$.

Un alt mod de a compune operatorii este prin folosirea operatorului = dupa un operator aritmetic (+ - * / %) sau un operator la nivel de bit (vezi capitolul 3).

De exemplu:

a+=3;

înseamna:

a=a+3;.

Limbajul C permite si atribuiri multiple, de tipul:

a=b=c=2;

În asemenea atribuiri, evaluarea se face de la dreapta spre stânga.

Dupa cum s-a aratat în paragrafele anterioare, în C nu exista tipul boolean, valorile de adevar true-false fiind reprezentate de 0 si 1, astfel ca rezultatul unei comparatii poate fi folosit în cadrul unei atribuiri:

a=b$>$3;

Aceasta are ca efect atribuirea valorii 1 sau 0 (functie de b mai mare ca 3 sau nu) variabilei a.

O alta particularitate a limbajului C este posibilitatea de a initializa variabile în momentul definitiei. Secventa:

int i=5;

defineste variabila i ca fiind de tip întreg, având valoarea initiala 5.

Un operator specific C-ului este operatorul de secventiere , (reprezentat prin virgula). Astfel:

i=(j++, a$<$b++);

are ca efect evaluarea expresiei j++, dupa care se evalueaza expresia a$<$b++, rezultatul acestei ultime evaluari fiind cel atribuit lui i.

Dupa cum s-a aratat în exemplele anterioare, în C se efectueaza automat conversia dintre tipuri în cazul atribuirii. La fel se întâmpla si în cazul transmiterii de parametri in functii.

Programatorul poate controla explicit aceste conversii folosind operatorul de casting (). Între paranteze se scrie tipul la care se doreste sa se faca conversia, iar parantezele se plaseaza înaintea variabilei sau expresiei de convertit. Un exemplu este prezentat în secventa:

float b;
b=3/(float)2;
Folosind operatorul de casting, b va avea valoarea 1.5. În absenta acestui operator, la împartirea lui 3 la 2, ambele valori fiind întregi, rezultatul ar fi fost trunchiat la 1, dupa care ar fi fost atribuit variabilei b.

Toti operatorii prezentati pâna acum au fost unari sau binari (cu unul sau doi operanzi). În C exista si un operator ternar (cu trei operanzi). Acesta este operatorul conditional ? :, echivalent cu instructiunea if. Astfel, secventa:

x=(a<b)?a:b;
este echivalenta cu:
if (a<b)
  x=a;
else
  x=b;


next up previous contents
Next: Probleme propuse Up: Variabile. Operatori. Expresii Previous: Variabile. Operatori. Expresii   Cuprins
Cristian Gavrila 2001-10-02