Cursul 3
Cursul 3
LIMBAJUL C – CURSUL 3
EXPRESII ŞI OPERATORI
LECT. UNIV. TÎRŞU VALENTINA
Agenda
• Expresii
• Operatori aritmetici
• Tipuri de conversie
• Operatori de asignare
• Operatori de incrementare si decrementare
• Operatori relationali
• Operatori logici
• Operatii pe biti
• Operatorul conditional
• Precedenta Operatorilor
Expresii
• Exemple de expresii:
3 + 5;
x;
x=0;
x=x+1;
printf("%d",x);
• Doua tipuri de expresii:
• Apeluri de functii
• Expresii formate din date si operatori
• Operatorul de asignare =
• Asigneaza partii din stinga valoarea din partea dreapta.
• Valoarea expresiei va fi valoarea din partea dreapta.
• Exemplu:
x = ( y = 3 ) +1; /* asigneaza lui y valoarea 3 */
/* valoarea lui (y=3) este 3 */
/* asigneaza lui x valoarea 4 */
Operatori de asignare compusi
• Adesea se utilizeaza operatorii:
• x=x+1, x=x*2, ...
• Limbajul C ofera o forma scurta pentru acestia:
• Forma Generica:
variabila op= expr echivalent cu variabila = variabila op expr
• Decrementare -- --x, x—
y=--x este echivalent cu: x=x-1; y=x;
y=x-- este echivalent cu: y=x; x=x-1;
Operatori Relationali
• Operatorii relationali permit compararea variabilelor:
• Ei returneaza val. 1 pentru true si val. 0 pentru false.
Operator Simbol Exemplu
Egalitate == x == y diferit de x = y
Mai mare > x>y
Mai mic < x< y
Mai mare/egal >= x >= y
Mai mic/egal <= x <= y
Inegalitate != x != y
Operatori Logici
• && si
• || sau
•! negare (operator unar)
!((a>1)&&(a<10))||((a<-1)&&(a>-10))
Operatii pe biti (1)
•C permite reprezentarea pe biti a variabilelor intregi
•Toti intregii pot fi reprezentati in forma binara:
• De exemplu, daca avem intregul pe 16-biti:
• 6552010 = 1111 1111 1111 00002 = FFF016 = 1777608
•In C, numerele hexazecimale incep cu 0x si numerele
octale incep cu 0:
• x=65520; baza 10
• x=0xfff0; baza 16 (hex)
• x=0177760; baza 8 (octal)
Operatii pe biti (2)
Operatori pe biti:
• Operatorul deplasare (shift):
• x << n (la stinga)
• Deplaseaza bitii cu n pozitii la stinga, punind zero in dreapta.
• Daca x = 1111 1111 1111 00002
• (fara semn)
x >> 1 este 0111 1111 1111 10002
#include <stdio.h>
int main ()
{
int w=10,x=20,y=30,z=40;
int temp1, temp2;
temp1 = x * x /++y + z / y;
printf ("temp1= %d;\nw= %d;\nx= %d;\ny= %d;\nz=
%d\n",
temp1, w,x,y,z);
y=30;
temp2 = x * x /y++ + z / y;
printf ("temp2= %d;\nw= %d;\nx= %d;\ny= %d;\nz=
%d\n",
temp2, w,x,y,z);
return 0;
}
Operatorul Conditional
• Forma generica:
exp1 ? exp2 : exp3 daca exp1 este true (non-zero)
valoarea este exp2
(exp3 nu este evaluata)
daca exp1 este falsa (0),
valoarea este exp3
(exp2 nu este evaluata)
• Exemplu:
z = (x > y) ? x : y;
• Aceasta este echivalent cu:
if (x > y)
z = x;
else
z = y;
Precedenta Operatorilor(1)
Nr. Categorie Operatori Semnificaţie Asociativitate
() apel de funcţie
[] expresie cu indici
1. Primari de la stânga la dreapta
. -> selectori de membru la structuri
:: operator de rezoluţie
! negare logică
~ negare pe bit
+- plus şi minus unar
2. Unari de la stânga la dreapta
++ -- incrementare/decrementare
& * obţinerea adresei/indirectare
sizeof (tip) dimensiunea operandului (în octeţi)
* / înmulţire/împărţire
3. Multiplicativi de la stânga la dreapta
% modulo (restul de la împărţirea întregilor)
4. Aditivi + - plus şi minus unar de la stânga la dreapta
5. Deplasări pe bit << >> deplasare stânga/dreapta pe biţi de la stânga la dreapta
< <= mai mic/mai mic şi egal
6. Relaţionali de la stânga la dreapta
> >= mai mare/mai mare şi egal
== egal
7. De egalitate de la stânga la dreapta
!= diferit
8. & ŞI logic pe bit de la stânga la dreapta
Precedenta Operatorilor(2)
Nr. Categorie Operatori Semnificaţie Asociativitate
de la stânga
9. ^ SAU exclusiv pe bit
la dreapta
de la stânga
10. | SAU logic pe bit
la dreapta
de la stânga
11. && ŞI logic
la dreapta
de la stânga
12. || SAU logic
la dreapta
de la stânga
13. Condiţional ?: operator condiţional ternar
la dreapta
= atribuirea simplă
*= /= %= atribuirea produs, cât, rest
de la dreapta la
14. De atribuire += -= atribuirea sumă, diferenţă
stânga
&= ^= |= atribuirea SI, SAU Exclusiv, SAU pe bit
<<= >>= atribuirea cu deplasare stânga/dreapta
de la stânga la
15. Virgulă , operatorul virgulă
dreapta