Un operator este un simbol care indică compilatorului necesitatea execuţiei unei operaţii matematice sau logice.
Operatori aritmetici
Operator | Semnificație | Exemplu |
++ | Incrementare | b++ (creste valoarea lui b cu 1) |
* | Înmulțire | a*b |
/ | Împărțire | a/b |
% | Restul impărțirii întregi | a%b (152%100 = 52) |
– | Scădere | a-b |
+ | Adunare | a+b |
Operatorii de incrementare/decrementare pot să apară în formă prefixată sau postfixată. în forma prefixată putem avea ++v sau —v iar în forma postfixată putem avea v++ sau v—. Diferenţa dintre cele două forme apare atunci când aceşti doi operatori apar într-o expresie de atribuire. Atunci când operatorul de incrementare/decrementare precede variabila, atunci se incrementează/decrementează variabila înainte de a o utiliza în atribuire. Invers, dacă operatorul de incrementare/decrementare urmează variabilei, atunci se incrementează/decrementează variabila după utilizarea ei în atribuire.
Deci instrucţiunea a=++v este echivalentă cu secvenţa: v=v+i urmată de a=v iar instrucţiunea a=v++ este echivalentă cu secvenţa: a=v urmată de v=v+1.
Exemplu:
int a,v=0;
a=++v; //după executarea instrucţiunii v=1 şi a=1
a=v++; //a=1 şi v=2
a=v–; //a=2 şi v=1
a=–v; //a=1 şi v=0;
Operatorul de conversie explicită (cast)
Operatorul de conversie explicită este un operator prefixat care se utilizează în construcţii de forma:
(tip) operand
De multe ori, este necesară forţarea tipului unui operand sau al unei expresii. Prin aceasta, tipul operandului (şi implicit valoarea lui) se converteşte spre tipul indicat între paranteze. Conversiile explicite sunt utile în cazurile în care se doreşte ca rezultatul unei operaţii să fie de alt tip decât cel determinat implicit, pe baza tipurilor operanzilor.
Exemplu:
Dacă se doreşte obţinerea rezultatului real, netrunchiat, al împărţirii a 2 numere întregi, cel puţin unul dintre operanzi trebuie convertit explicit la tipul double.
int a=10, b=4;
double c;
c=a/b; //deşi c este de tip double, el va conţine valoarea 2
c=(float)a/b; //în acest caz c va conţine valoarea 2.5
Operatorul dimensiune (sizeof)
Operatorul dimensiune returnează numărul de octeţi ai reprezentării interne a unei date. Acest operator prelucrează tipuri, spre deosebire de ceilalţi operatori care prelucrează valori. Operatorul dimensiune se utilizează în construcţii de forma:
sizeof(data)
unde data poate să fie variabilă simplă, nume de tablou, tip, element de tablou sau element de structură. Deoarece tipul operanzilor este determinat încă din faza de compilare, sizeof este un operator cu efect la compilare, adică operandul asupra căruia se aplică sizeof nu este evaluat, chiar dacă este reprezentat de o expresie.
Exemplu:
char a;
int b;
float c;
int e[10];
printf(“%d\n”, sizeof(a)); //va fi afişată valoarea 1
printf(“%d\n”, sizeof(char)); //va fi afişată valoarea 1
printf(“%d\n”, sizeof(float)); //va fi afişată valoarea 4
printf(”%d\n”, sizeof(c)); //va fi afişată valoarea 4
printf(“%d\n”, sizeof(e)); //va fi afişată valoarea 20
Utilizarea operatorului sizeof permite creşterea portabilităţii programului.
Operatorul condiţional
Se utilizează în expresii de forma: exp1?exp2:exp3;
Această construcţie are următorul efect: Se evaluează valoarea expresiei expi. Dacă ea are valoarea adevărat, atunci se evaluează exp2, valoarea acesteia fiind şi valoarea întregii expresii. Dacă expi are valoarea fals, atunci se evaluează exp3 iar valoarea lui exp3 va fi şi valoarea întregii expresii.
Exemplu:
int a=5, b=3,c;
c=a > b?b:a;
Se evaluează a > b -> adevărat deci c=3.
Exemple:
Să se scrie programul C care comparând valorile a 2 variabile o afişează pe cea mai mare.
#include "stdio.h"
void main(void)
{
int a=7,b=3;
printf("maxim=%d\n" ,a > b?a :b);
}
Să se scrie programul C care comparând valorile a 3 variabile a afişează pe cea mai mare.
#include "stdio.h"
void main(void)
{
int a=7,b=3,c=9;
printf("maxim=%d\n",a > b?(a > c?a:c):(b > c?b:c));
}