0% au considerat acest document util (0 voturi)
15 vizualizări19 pagini

Cursul 3

Documentul prezintă conceptele fundamentale ale expresiilor și operatorilor în limbajul de programare C, inclusiv operatorii aritmetici, de asignare, incrementare, decrementare, relaționali și logici. De asemenea, sunt discutate tipurile de conversie, operațiile pe biți și precedența operatorilor. Exemplele oferite ilustrează utilizarea acestor operatori în codul C.

Încărcat de

Marcica Dranga
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
15 vizualizări19 pagini

Cursul 3

Documentul prezintă conceptele fundamentale ale expresiilor și operatorilor în limbajul de programare C, inclusiv operatorii aritmetici, de asignare, incrementare, decrementare, relaționali și logici. De asemenea, sunt discutate tipurile de conversie, operațiile pe biți și precedența operatorilor. Exemplele oferite ilustrează utilizarea acestor operatori în codul C.

Încărcat de

Marcica Dranga
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 19

PROGRAMARE IN

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

• O expresie in C are de obicei o valoare


• exceptie pentru apelurile de functii care returneaza void.
Operatori Aritmetici

Operator Simbol Actiune Exemplu


Adunare + Aduna operanzii x+y
Scadere - Scade al 2 din primul x-y
Negare - Neaga operandul -x
Inmultire * Inmulteste operanzii x*y
Impartire / Imparte operanzii x/y
Restul impartirii
Rest % x%y
(modul)
Tipuri de conversie
Tip Tip Efect conversie
valoare_stânga valoare_dreapta
char int se preiau cei mai semnificativi 8 biţi
dacă valoarea este >127, se preia valoarea
char unsigned char
negativă
char long int se preiau cei mai semnificativi 8 biţi
dacă valoarea este >32767, se preia
int unsigned int
valoarea negativă
int long int se preiau cei mai semnificativi 16 biţi
se preia partea întreagă a valorii; dacă
int float aceasta depăşeşte domeniul int, se
trunchiază
se reduce precizia de reprezentare; dacă şi
float double aşa se depăşeşte domeniul float, se
trunchiază
se reduce precizia de reprezentare; dacă şi
double long double aşa se depăşeşte domeniul long, se
trunchiază
Operatorul de asignare
• x=3
• = este un operator
• valoarea acestei expresii este 3
• = are urmatorul efect -- asigneaza lui x valoarea 3

• 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

Operator Echivalent cu:


x *= y x=x*y
y -= z + 1 y = y - (z + 1)
a /= b a=a/b
x += y / 8 x = x + (y / 8)
y %= 3 y=y%3

• Ultima valoare va fi egala cu valoarea finala a lui expr


• De exemplu: x=3; y= (x+=3); /* x si y au fiecare valoarea 6 */
Operatori de Incrementare si
Decrementare
• Deosebim operatori pre- si post-incrementare si
decrementare:

• Incrementare: ++ ++x, x++


y=++x este echivalent cu: x=x+1; y=x;
y=x++ este echivalent cu: y=x; x=x+1;

• 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

x << 1 este 1111 1111 1110 00002


• x >> n (la dreapta)
• Deplaseaza bitii cu n pozitii la dreapta:
• Punind 1 in partea stinga daca este un intreg cu semn
• Punind 0 in partea stinga daca este un intreg fara semn

• (fara semn)
x >> 1 este 0111 1111 1111 10002

• x >> 1 este 1111 1111 1111 1000 (cu semn)


2
Operatii pe biti (3)
• Operatori logici pe biti:
• Se aplica tuturor tipurilor intregi:
• & Şi pe biti
x= 0xFFF0 1111 1111 1111 0000
y= 0x002F & 0000 0000 0010 1111
x&y= 0x0020 0000 0000 0010 0000
• | SAU pe biti
x|y= 0xFFFF 1111 1111 1111 0000
| 0000 0000 0010 1111
1111 1111 1111 1111
• ^ SAU EXCLUSIV pe biti
x^y= 0xFFDF
• ~ COMPLEMENT pe biţi
~ y= 0xFFD0
• Inlocuieste fiecare bit 0 cu 1 şi fiecare bit 1 cu 0
Inmultire si Impartire cu 2
• Inmultirea si impartirea cu 2 este adesea mai lenta decit deplasarea
pe biti.
• Inmultirea cu 2 poate fi inlocuita cu deplasarea cu 1 bit la stinga:
n = 10
printf(“%d = %d” , n*2, n<<1);
printf(“%d = %d”, n*4, n<<2);
……
• Impartirea cu 2 poate fi inlocuita cu deplasarea cu 1 bit la dreapta:
n = 10
printf(“%d = %d” , n/2, n>>1);
printf(“%d = %d”, n/4, n>>2);
Exemplu
• Care este diferenta dintre cele doua linii de la iesire (output)?

#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

S-ar putea să vă placă și