Documente Academic
Documente Profesional
Documente Cultură
1
Mădălina Roxana. Buneci
Conversii de tip.
Când un operator binar se aplică între doi operanzi de tip diferit, are loc o
conversie implicită a tipului unuia dintre ei, și anume, operandul de tip “mai restrâns”
este convertit la tipul “mai larg” al celuilalt operand. Astfel în expresia f + i, operandul
int este convertit în float.
• dacă unul din operanzi este double restul operanzilor se convertesc în double
iar rezultatul este tot double.
• dacă unul din operanzi este long restul operanzilor se convertesc în long , iar
rezultatul este tot long.
• dacă nu se aplică ultimele 3 reguli, atunci operanzii vor fi de tip int și rezultatul
de asemeni de tip int.
2
Programarea calculatoarelor și limbaje de programare – notițe de curs/ Curs 6
Operatori și expresii
Operatori
unari
binari
ternari
- precedență operatorilor
poate fi modificată prin utilizarea ( )
- asociativitate : la stânga, la dreapta
- conversii de tip : conversii implicite sau conversii explicite
promovare la tipul cu domeniul de valori mai mare
Operatorul de atribuire =
v = expresie;
(v variabila, v refera un obiect din memorie)
Rezultatul expresiei de atribuire este dat de valoarea înscrisă la adresa lui v.
Asociativitatea – la dreapta
Instrucțiunea expresie: expresie;
Se pot face atribuiri succesive:
a = b =… = x =expresie;
a = (b =… = (x = expresie))…);
a = (b = (c =1));
Operatori de atribuire combinați: op =
v op = expresie echivalentă cu : v = v op expresie
(de exemplu, v += 8 v = v + 8)
(tip) operand
tip (operand)
3
Mădălina Roxana. Buneci
Operatori aritmetici
a/b
1/3 == 0
1.0/3 == 0.333…. == 1./3 == 1/3 Th: m, nN, m = n q + r, r{0, 1, …, n-1}
a % b a, b tip intreg
a, b sunt de tip întreg, atunci a/b este întreg și de obține prin trunchierea numărului a:b.
(a/b)*b + a%b == a.
-5/2 = -2 5/-2 =-2
-2*2 + (-5)%2 = -5 -2*(-2) +5 % (-2) = 5
++x x++ x=x+1
--x x-- x = x-1
Exemplu
int x, y;
x = 1;
y = x ++; //y = 1, x= 2
int x, y;
x = 1;
y = ++x; //x = 2, y = 2
4
Programarea calculatoarelor și limbaje de programare – notițe de curs/ Curs 6
Operatori relaționali
>
>=
<
<=
== egal
!= diferit de
rezultatul este de tip logic
Inițial în limbajul C nu a existat un tip de date logice. Orice dată de tip scalar era
interpretată de tip logic după următoarea regulă:
nenul adevăr
nul fals
Rezultatul de tip logic al unei expresii era considerat a fi
1 pentru adevăr
0 pentru fals
C _Bool bool
C++ bool
Operatori logici
! not
&& și logic
|| sau logic
a < b || a > c
(a < b) || (a > c)
Operatorul virgulă:
expr1, expr2
expr1, expr2, … , exprn
, operator
, separator f(a, b, c) f funcție
5
Mădălina Roxana. Buneci
x[i]
x[(i,j)]
Operatorul dimensiune:
sizeof(tip) sau sizeof expresie
numărul de bytes (1 byte = CHAR_BIT)
sizeof(char) == 1
Operatorul condițional: ?:
expr1 ? expr2 : expr3;
Exemplu
(a < b) ? a : b // min{a,b}
Pentru a accesa o variabilă globală atunci când există o variabilă locală cu același nume
Pentru a defini o funcție în afara unei clase. În caz de moștenire multiplă
~ complementare
<< deplasare la stânga (left shift), >> deplasare la dreapta (right shift)
6
Programarea calculatoarelor și limbaje de programare – notițe de curs/ Curs 6
& și (conjuncție)
^ sau exclusiv
| sau (disjuncție)
Operatorul ~ transforma fiecare bit din reprezentarea operandului în
complementarul său, adică biții 1in 0 și biții 0 în 1:
b ~b
0 1
1 0
7
Mădălina Roxana. Buneci
return 0;
}
afișează
0xffa1 & 0xe213 = 0xe201
0xffa1 ^ 0xe213 = 0x1db2
0xffa1 | 0xe213 = 0xffb3
~ 0xffa1 = 0xffff005e
~ 0xe213 = 0xffff1dec
0xef1a 0xba8e
0xef1a == 0b1110111100011010
0xba8e == 0b1011101010001110
1110111100011010 &
1011101010001110
---------------------------
1010 1010 0000 1010
a 0 a
0xef1a & 0xba8e = 0xaa0a
Operatorul de deplasare la stânga (left shift) << este un operator binar care are
ca rezultat numărul obținut prin deplasare spre stânga a biților din reprezentarea în
memorie a primului operand cu un număr de poziții egal cu al doilea operand.
Operatorul de deplasare la dreapta (right shift) >> este un operator binar care
are ca rezultat numărul obținut prin deplasare spre dreapta a biților din reprezentarea
în memorie a primului operand cu un număr de poziții egal cu al doilea operand.
Deci operatorii de deplasare sunt binari, primul operand este cel ai cărui biți
sunt deplasați, iar al doilea indică numărul de biți cu care se face deplasarea.
a<<n
a>>n
8
Programarea calculatoarelor și limbaje de programare – notițe de curs/ Curs 6
9
Mădălina Roxana. Buneci
10
Programarea calculatoarelor și limbaje de programare – notițe de curs/ Curs 6
= Simple assignment
+= -= Assignment by sum and difference
*= /= %=
Assignment by product, quotient, and
remainder
14
<<= >>=
Assignment by bitwise left shift and right
shift
&= ^= |=
Assignment by bitwise AND, XOR, and
OR
15 , Comma Left-to-right
11
Mădălina Roxana. Buneci
12