Documente Academic
Documente Profesional
Documente Cultură
Curs 4
CUPRINS
1. Noţiuni introductive
2. Operatori aritmetici
3. Operatori relaţionali
4. Operatori logici
5. Operatori de atribuire
6. Operatorul de conversie explicită
7. Operatorul de determinare a dimensiunii
8. Operatori paranteză
9. Operatorul condiţional
10. Operatorul virgulă
11. Expresii
2
1. NOŢIUNI INTRODUCTIVE
Expresie: unul sau mai mulţi operanzi legaţi prin operatori
4
2. OPERATORI ARITMETICI
Operatori unari :
+ : fără efect
- : negativare
exemple : -123.45; -a; -(a+b);
Operatori binari :
multiplicativi: * (înmulţire), /(împărţire), %(modulo)
aditivi: +(adunare), -(scădere)
Observaţii:
nu există operatori diferiți pentru tipuri diferite (int, float,
double)
operatorul modulo (%) se foloseşte numai cu tipul int -
restul împărţirii întregi
operatorul div (/) aplicat între operanzi de tip întreg are ca
rezultat partea întreagă a rezultatului împărțirii (câtul
împărțirii întregi) 5
Exemple :
int a=7, b=2;
float f=1.234f;
float rez= f / b; // rez= 0.617
float fr= f%b; // EROARE, operanzii nu sunt intregi
6
3. OPERATORI RELAŢIONALI
Sunt operatori binari
Testează relaţia dintre operanzi:
operand1 operator_relational operand2
7
OPERATORI RELAŢIONALI
Exemple:
int x, y;
x = 0; y = 0;
// bool ok=true;
cout << "x < y: " << (x < y) << '\n’; // x<y: 0 (false)
cout << "x > y: " << (x > y) << '\n'; // x>y: 0 (false)
cout << "x <= y: " << (x <= y) << '\n’; // x<=y: 1 (true)
cout << "x == y: " << (x == y) << '\n’; // x==y: 1 (true)
// cout<<ok<< "\n"; // 1
//cout<<boolalpha<<ok<< "\n"; // true
8
4. OPERATORI LOGICI
Operatori logici pe operand
Exemplu :
int x = 7, y = 0;
printf("!x: %d\n" , !x) ; // !x=0
printf(" x && y: %d\n", x && y); // x && y: 0
printf(" x || y: %d\n", x || y); // x || y: 1
printf("x>y: %d\n", x>y); // x>y: 1
printf("!(x>y): %d\n", !(x > y)); // !(x>y):0
Exemplu:
int x= 51;
Reprezentarea in binar: x = 00110011
atunci ~x= 11001100 (-52)
a << 2 → a*4
a = 10 = 00001010
a<< 2 = 00101000 = 40 = 10*22
12
Observaţie: se pot pierde sau altera date
a = 42 = 00101010
• (considerând valoarea întreagă
reprezentată pe un octet)
13
deplasare dreapta ‘>>’
operand1 >> operand2
a >> 3 → a/8
14
Exemple:
a = 24 = 00011000
a>> 2 = 00000110 = 6 = 24/22
a =-88 = 10101000
a>>3 = 11110101 = -11 = 88/ 23
15
ŞI pe biţi ‘&’:
operand1 & operand2
Exemple: & 0 1
n =0x5a 0 0 0
n & 0x02
1 0 1
01011010 &
00000010 (masca)
-------------
00000010
Păstrează bitul 1, restul sunt șterși în rezultat
16
n =0x5a
n & 0x0f
01011010 &
00001111 (masca)
-------------
00001010
şterge (semi)octetul mai semnificativ şi
păstrează neschimbat (semi)octetul cel
mai puţin semnificativ
17
SAU pe biţi ‘|’: | 0 1
operand1 | operand2
19
SAU EXCLUSIV pe biţi ‘^’
operand1 ^ operand2
20
n = 0x5b 01011011 ^
00000001
-------------
010110102 = 0x5a
21
5. OPERATORI DE ATRIBUIRE (ASIGNARE)
Atribuirea sau înscrierea unei valori într-o variabilă este
operaţia care apare cel mai des
22
Atribuire simplă
Forma:
var = expresie;
unde var poate fi o variabilă simplă sau o referinţă
Efect:
valoarea expresiei este înscrisă în variabilă
Exemplu:
de la int la char: se pierde octetul (octetii) m.s.,
24
Atribuire compusă:
Forma: operator=
unde operatorul poate fi unul aritmetic binar sau unul
logic pe biţi
Tipuri:
/=, %=, *=, -=, +=, <<=, >>=, &=, |=, ^=
Structura:
var operator= expresie; <=> var = var operator expresie;
Motivaţie:
cod generat mai eficient prin eliminarea unui acces la
memorie
25
Exemple: n += 9; <=> n = n + 9
n *= 5; <=> n = n * 5
Exemplu:
int x, y;
y = 4;
x = ++y; // x=5; y=5; 27
28
6. OPERATORUL DE CONVERSIE EXPLICITĂ (CAST)
Forma:
(tip)operand
Rezultat:
valoarea operandului convertită la noul tip în operația
curentă
nu se modifică tipul sau valoarea operandului
Exemplu:
int i;
float a, r;
...
i = 5;
a = 2.0f;
r = i/(int)a; // r=2.0; !!! Variabila a ramane de tip
29
float si valoare 2.0;
7. OPERATORUL DE DETERMINARE A DIMENSIUNII
Forma:
sizeof(tip) - dimensiunea în octeți a tipului respectiv
sizeof expresie sau sizeof(expresie)
dacă expresie este numele unei variabile, rezultatul
este numărul de octeţi alocaţi pentru variabila
respectivă
dacă expresie este numele unui tablou, rezultatul este
numărul de octeţi alocaţi pentru tablou
dacă expresie este numele unei structuri, rezultatul
este numărul de octeţi alocaţi pentru structură
30
Exemplu:
// in Visual Studio tipul int si tipul float sunt reprezentate
pe 4 octeti
int i, n;
float tab[10];
...
i = sizeof(int); // i va avea valoarea 4
i = sizeof n; // i = 4
i = sizeof tab[5]; // i = 4
i = sizeof tab; // i = 40
n = sizeof(tab)/sizeof(float) // n = 10
31
8. OPERATORI DE ADRESARE(&, REFERENTIERE)
SI DE INDIRECTARE (*, DEREFERENTIERE)
34
Exemplu:
int i, j, k;
...
i = (j < 0) ? (-j) : (j); // i = abs(j);
k = (i >= j) ? i : j; // k = max(i,j)
35
10. OPERATORUL VIRGULĂ
Virgula este un simbol cu dublă semnificaţie în limbajul
C/C++:
cel mai frecvent apare ca delimitator în declaraţii de
date sau în lista de parametri a unei funcţii
37
11. EXPRESII
Expresiile se evaluează pe baza unui set de reguli, care
precizează:
precedenţa
asociativitatea operatorilor
conversiile aplicate operanzilor
39
ORDINEA DE EVALUARE A EXPRESIILOR
Operatori Asociativitate
( ), [ ] S->D
!, ~, +, -, ++, --, &, *, cast, sizeof D->S
*, /, % S->D
+, - S->D
<<, >> S->D
<, <=, >, >= S->D
==, != S->D
& S->D
^ S->D
| S->D
&& S->D
|| S->D
?: D->S
40
=, *=, /=, %=, +=, -=, &=, ^=, |=, <<=, >>= D->S
, S->D
CONVERSII DE TIP ÎN EXPRESII (IMPLICITE)
Regula de bază:
se promovează tipul cu domeniu de valori mai mic
către tipul cu domeniul de valori mai mare
42
DUPA ACEST CURS STIM…
43
44