Cap 4
Cap 4
Operatori şi expresii
4.1 Operanzi
4.2 Operatori
Spre deosebire de alte limbaje (de exemplu Pascal) în care atribuirea este
executată de o instrucţiune, în C aceasta se realizează prin intermediul unei
expresii cu operator de atribuire.
Forma generală este: v=expresie
unde v este o variabilă simplă, referinţă către un element al unui masiv sau un cîmp
al unei structuri sau o expresie în urma evaluării căreia se obţine o adresă. În C,
entitatea care se poate afla în stînga unui operator de atribuire (care poate primi
valoare) se numeşte left value.
Pentru a se putea efectua atribuirea, tipul expresiei şi tipul entităţii din
stînga operatorului de atribuire trebuie să fie măcar compatibile. Dacă sînt
incompatibile se produce eroare la compilare (deoarece compilatorul nu poate
insera în codul obiect apelurile pentru operaţiile de conversie).
Efectele atribuirii constau în:
• evaluarea expresiei din dreapta operatorului de atribuire, cu determinarea unei
valori şi a unui tip;
• memorarea valorii expresiei din dreapta în variabila din stînga;
• întreaga expresie de atribuire are valoarea şi tipul variabilei din stînga.
Exemplu:
int a;
char b;
float c;
b=a=c=180.5;
Lui c i se atribuie valoarea 180.5, lui a i se atribuie valoarea 180, iar lui b i se
atribuie valoarea –76.
Exerciţiu:
#include <stdio.h>
main()
{ signed char a;
unsigned char b=234;
a=b; /* a= -22 */
int c=435;
b=c; /* b=179 */
long int d=435675;
b=d; /* b=219 */
c=d; /* c=-23077 */
float e=-23.123445;
c=e;} /* c=-23 */
Exemplu:
y=x++; este echivalent cu secvenţa y=x; x=x+1;
y=--x este echivalent cu secvenţa x=x-1; y=x;
Operatorii logici sînt prezentaţi în tabelul 4.3 (în ordinea priorităţii), iar
operatorii relaţionali în tabelul 4.4.
Tabelul 4.3 Operatorii logici
Semnificaţie operaţie Operator
Negare !
Şi logic &&
Sau logic ||
Sau exclusiv Nu există
!a&&b||!b&&a
Exemplu: expresia a<0||b<0 are valoarea 1, dacă cel puţin unul din operanzii a şi
b este negativ, respectiv valoarea 0 în caz contrar.
Operanzii pot fi de orice tip întreg. Dacă este nevoie, operanzii sînt extinşi
la reprezentare pe 16 biţi. Execuţia are loc bit cu bit. Pentru o pereche de biţi (x,y),
valorile posibile rezultate în urma aplicării operatorilor logici la nivel de bit sînt
prezentate în tabelul 4.6.
operand<<număr_poziţii şi operand>>număr_poziţii
Operanzii sînt de tip întreg, iar număr_poziţii indică numărul de biţi cu care se
deplasează valoarea. La deplasare se propagă valoarea 0, la stînga sau la dreapta.
Dacă tipul primului operand este unsigned, deplasarea spre stînga este
echivalentă cu valoare=valoare*2număr_poziţii, iar deplasarea spre dreapta este
echivalentă cu valoare= [valoare/2număr_poziţii], unde parantezele drepte semnifică
partea întreagă a cîtului.
Operatori şi expresii
Exemple:
1. Următoarea secvenţă afişează, în ordine, biţii unui octet (dată de tip char).
char c;
scanf("%d",&c);
for(int i=0;i<8;i++)
printf("%d",(c&((int)pow(2,7-i)))>>7-i);
2. Următoarea secvenţă afişează, în ordine inversă, biţii unui octet (dată de tip
char).
char c;
scanf("%d",&c);
for(int i=0;i<8;i++,c=c>>1)
printf("%d",c&1);
Exemplu:
int a=10, b=3, c, d;
d=(c=a+b, b+=c, a/2);
Valorile variabilelor după evaluarea expresiei sînt: a = 10, c = 13, b = 16, d = 5.
int a=7;
float b=9.3;
int c;
c=a+int(b);
După executarea secvenţei, c are valoarea 16, obţinută prin adunarea valorii lui a
(7) şi a celei rezultate prin conversia valorii lui b către tipul întreg (9).
sizeof var
sizeof(var)
sizeof(tip)
unde tip este numele unui tip de dată sau descrierea unui tip de dată, iar var poate fi
numele unei variabile simple, numele unui masiv, numele unei structuri, referirea
la un element al unui masiv sau la un cîmp al unei structuri.
În primele două forme, rezultatul va fi numărul de octeţi alocaţi entităţii
respective. Pentru ultima formă, rezultatul este numărul de octeţi care se alocă
pentru a reprezenta o variabilă de tipul tip.
Operatori şi expresii
Exemple:
int x;
sizeof(x) are valoarea 2
sizeof(int) are valoarea 2
Operatorul condiţional este singurul care are trei operanzi şi este specific
limbajului C. Forma generală este:
expresie_1?expresie_2:expresie_3
Exemplu:
int a=7,b=9,c;
c=(a>b)?a:b;
Variabila c primeşte valoarea maximă dintre a şi b (în exemplul de mai sus, 9).
Ştiinţa învăţării unui limbaj de programare. Teorie