Vous êtes sur la page 1sur 57

Expresia este o succesiune de operatori i

operanzi legai ntre ei dup reguli specifice limbajului.


Operanzii pot fi:
- nume de variabile de memorie sau de constante
simbolice;
- constante;
- funcii care returneaz un rezultat chiar prin numele lor .
Operatorii sunt simboluri care determina executarea
anumitor operaii.
Expresia poate s conin numai un operan d
(exemplu: constantele literare, variabilele: 11, x, succes!)

Operatorii pot fi:


- unari se aplic pe un singur operand
- binari se aplic pe doi operanzi
- ternari se aplic pe trei operanzi
Tipuri de operanzi:
- operatori aritmetici (matematici)
- operatori de incrementare i decrementare
- operatori relaionali
- operatori logici
- operatori de atribuire
- operatorul virgul
- operatorul condiional
- operatorul de conversie explicit
- operatorul dimensiune

Precedena operatorilor: exist 16 niveluri de


prioritate.
Asociativitatea operatorilor: exist dou tipuri
de asociativitate de la stnga la dreapta i de
la dreapta la stnga.
Reguli: - operatorii care au acelai nivel de
prioritate au aceeai asociativitate
- toi operatorii unari au acelai nivel de
prioritate, prioritatea lor fiind mai mare dect a
oricrui operator binar sau ternar, iar
asociativitatea lor este de la stnga la dreapta.

n funcie de rezultatul obinut n urma evalurii expresilor


acestea pot fi:
- expresii matematice (rezultatul este un numr
ntreg sau real)
- expresii logice (rezultatul este 0 sau 1)
- expresii de tip text (rezultatul este un ir de
caractere)
- expresii fara tip (contin apelul unor functii care
nu returneaza nici un rezultat)
Exist instruciunea expresie care are sintaxa:
expresie;

Operatorii aritmetici
Operatori unari: operatorul minus (-),
operatorul plus (+)
- folosii pentru stabilirea semnului unui operand numeric.
Operatori binari:
- de adunare:
operatorul pentru adunare (+),
operatorul pentru scdere (-)
- de nmulire:
operatorul pentru nmulire (*),
operatorul pentru mprire (/),
operatorul modulo restul mpririi (%)
- asociativitate de la stnga la dreapta
- precedena operatorii unari au prioritate mai mare dect cei
binari, iar pentru cei binari preceden a este cea aritmetic

Operatorii aritmetici
Observaii:
1. Operatorul / se folosete i pentru mprirea
ntreag, dar i pentru mprirea real, rezultatul
depinznd de tipul operanzilor, astfel: dac ambii
operanzi sunt de tip ntreg, rezultatul va fi de tip ntreg
(mprire ntreag); dac cel puin unul dintre operanzi
este de tip real, rezultatul va fi de tip real (mprire
real)

Operatorii aritmetici
Exemplu:
#include<iostream.h>
void main()
{int a=10,c=3;
float b=10;
cout<<a/3;
//3
cout<<b/3;
//3.333333
cout<<a/c;
//3
cout<<a/3.;
//3.333333
}

Operatorii aritmetici
Observaii:
2. Operatorul % NU se poate aplica pe valori
numerice reale (pe operanzi de tip float sau
double)
3. Operatorii / i % se pot folosi pentru a calcula
ctul (c) i restul (r) mpririi a dou numere ntregi
a i b cu semn.
c = |a| / |b|
r = |a| % |b|
a

a/b

a%b

>0

>0

>0

<0

-c

<0

>0

-c

-r

<0

<0

-r

Operatorii aritmetici
Exemplu:
#include<iostream.h>
void main()
{int a=7,b=3;
cout<<a/b<< <<a%b<<endl;
cout<< a/-b<< <<a%-b<<endl;
cout<< -a/b<< <<-a%b<<endl;
cout<< -a/-b<< <<-a%-b<<endl;
}

//2 1
//-2 1
//-2 -1
//2 -1

Operatorii aritmetici
4. Pentru a schimba ordinea implicit de executare a
operatorilor matematici dat de prioritatea lor, se pot
folosi parantezele rotunde () care au rol de separatori.
Exemplu:
#include<iostream.h>
void main()
{int a=7,b=3;
cout<<a+b*2<< <<(a+b)*2<<endl;}

//13 20

Operatorii aritmetici
5. O expresie aritmetic poate conine operanzi numerici de mai multe
tipuri.
Dac a i b sunt operanzi numerici de dou tipuri diferite (char i
int, int i float), iar c este rezultatul, tipul rezultatului c se va obine prin
conversie aritmetic implicit se face promovarea tipului inferior la
tipul superior, rezultatul avnd tipul superior.
Regulile de conversie aritmetic implicit:
a) dac unul dintre operanzi este de tip long double, i cellalt este
convertit n tipul long double, altfel se trece la pasul b);
b) dac unul dintre operanzi este de tip double, i cellalt este convertit
n tipul double, altfel se trece la pasul c);
c) dac unul dintre operanzi este de tip float, i cellalt este convertit n
tipul float, altfel se trece la pasul d);
d) dac unul dintre operanzi este de tip unsigned long, i cellalt este
convertit n tipul unsigned long, altfel se trece la pasul e);
e) dac unul dintre operanzi este de tip long, i cellalt este convertit n
tipul long, altfel se trece la pasal f);
f) convertete tipurile char, unsigned char i short n tipul int.

Operatorii aritmetici
Exemplu:
#include<iostream.h>
void main()
{float a=1;
char b=a;
cout<<a+b<<endl;
//98
const float PI=3.14;
int raza = 2;
cout<<aria= <<PI*raza*raza<<endl;
}

Operatorul de conversie explicit


Conversia de tip poate fi forat s se execute n alt
mod dect cel implicit, folosind operatorul de conversie
explicit.
Este un operator unar care precede operandul i are
sintaxa:
(tip_dat)
unde tip_dat este tipul datei n care se convertete
operandul.
Operatorul de conversie explicit de tip nu modific tipul
variabilei de memorie pe care este aplicat. Conversia se face
numai n cadrul operaiei de evaluare a expresiei.
Exemplu: operatorul (int) convertete operandul n tipul int,
operandul (float) convertete operandul n tipul float.

Operatorul de conversie explicit


Exemplu:
#include<iostream.h>
void main()
{int a=7, b=2;
float x=-1.5;
cout<<a/b<< <<(float)a/b<<endl;
//3 3.5
cout<<x<< <<(int)x<<endl;
//-1.5 -1
int n=97, m=1;
char c=a;
float y=-3.5, z=97.5;
cout<<m<< <<(float)m<<endl;
//1 1
cout<<(float)n<< <<(char)n<<endl;
//97 a
cout<<(int)c<< <<c<<endl;
//97 a
cout<<(int)y<< <<y<< <<(char)z<<endl; //-3 -3.5 a
cout<<1/2+1/3<< << 1/2.+1./3<< << (float)1/2+1/(float)3;
}

Operatorii de incrementare i
decrementare
Sunt operatori unari care se aplic pe un operand numeric:
- operatorul de incrementare ++ adun 1 la valoarea
operandului (a++ aa+1)
- operatorul de decrementare -- scade 1 la valoarea
operandului (a-- aa-1)
Aceti operatori pot fi:
- prefixai se aplic naintea operandului (++a sau
--a) incrementarea, respectiv decrementarea operandului,
se face naninte ca valoarea operandului s intre n calcul
(nainte s fie evaluat expresia)
- postfixai - se aplic dup operand (a++ sau a--)
incrementarea, respectiv decrementarea operandului, se
face dup ce valoarea operandului a intrat n calcul (dup
ce a fost evaluat expresia)

Operatorii de incrementare i decrementare


Exemplu:
#include<iostream.h>
void main()
{int a=1,b=2;
cout<<a+++b++<< ;cout<<a<< <<b<<endl;
//3 2 3
cout<<++a+(++b)<< ;cout<<a<< <<b<<endl;
//7 3 4
cout<<a+b++<< ;cout<<a<< <<b<<endl;
//7 3 5
cout<<a+++b--<< ;cout<<a<< <<b<<endl;
//8 4 4
cout<<a+++--b<< ;cout<<a<< <<b<<endl;
//7 5 3
float x=1.5, y=-2.5;
char c=a;
cout<<x+++y++<< ;cout<<x<< <<y<<endl;
//-1 2.5
-1.5
cout<<x--+y--<< ;cout<<x<< <<y<<endl;
//1 1.5 -2.5
cout<<++(++c)<<endl;
//c
}

Operatorii relaionali
Sunt operatori binari, iar rezultatul produs este de tip
numeric: 0 pentru fals i 1 pentru adevrat.
Ei se impart in doua grupe:
- operatori relaionali pentru inegaliti:
< >
<= >=
- operatori relaionali petru egalitate:
== (egal) != (diferit)
Operatorii relaionali de inegalitate au prioritate mai
mare dect cei de egalitate, iar toi operatorii
relaionali au prioritate mai mic dect operatorii
aritmetici.
Asociativitatea operatorilor relaionali este de la
stnga la dreapta.

Operatorii relaionali
Exemplu:
#include<iostream.h>
void main()
{int a=2,b=3;
cout<<(a>b)<< <<(a<=b)<<endl;
cout<<(a==b)<< <<(a!=b)<<endl;}

//0 1
//0 1

Observaie: expresiile relaionale se scriu ntre


paranteze atunci cnd trebuie afiate deoarece
operatorul de ieire are prioritate mai mare dect
operatorii relaionali.

Operatorii logici
Exist trei operatori logici:
- operatorul unar pentru negaie logic: !
- operatorul binar pentru i logic: &&
- operatorul binar pentru sau logic: ||
Operatorii logici se aplic pe orice variabil sau constant
de tip numeric (0 = fals, orice valoare diferit de zero =
adevrat) i produc un rezultat numeric: 0 pentru fals i 1
pentru adevrat.
Operatorul && are prioritate mai mare dect operatorul ||,
iar operatorul de negare !, fiind operator unar, are prioritate
mai mare dect operatorii && i ||.
Asociativitatea operatorilor logici binari cu acelai nivel de
prioritate este de la stnga la dreapta.
. Operatorii logici au prioritate mai mic dect operatorii
relaionali.

Operatorii logici
Exemplu:
#include<iostream.h>
void main()
{float x=2.5;
int a=0,b=2,c=3;
cout<<(x>0)<< <<(!x)<< <<(b&&c)<<endl; //1 0 1
cout<<(a&&c)<<(a||c)<<(x&&c)<<endl;
//011
cout<<(a&&x)<<(a||x)<<endl;}
//01

Operatorii logici
Observaii:
- n cazul operatorilor logici binari, al doilea operand
nu mai este evaluat dac primul operand decide valoarea
rezultatului:
- operatorul &&: dac primul operand are valoarea
0, rezultatul este 0 oricare ar fi valoarea celui de-al doilea
operand, iar dac valoarea primului operand este 1, rezultatul
depinde de valoarea celui de-al doilea operand (nu se mai
evalueaz al doilea operand doar atunci cnd primul are
valoarea 0);
- operatorul ||: dac primul operand are valoarea 1,
rezultatul este 1 oricare ar fi valoarea celui de-al doilea
operand, iar dac valoarea primului operand este 0, rezultatul
depinde de valoarea celui de-al doilea operand (nu se mai
evalueaz al doilea operand doar atunci cnd primul are
valoarea 1).

Operatorii logici
Exemplu:
#include<iostream.h>
void main()
{int a=0,b=1;
cout<<(a&&b++)<<endl;
cout<<b<<endl;
cout<<(b||a++)<<endl;
cout<<a<<endl;}

//0
//1
//1
//0

Operatorii de atribuire
Operatorul de atribuire = este un operator binar (a=b) care
atribuie primului operand (a) valoarea celui de-al doilea
operand (b).
Construcia a=b este o expresie, rezultatul evalurii ei fiind
valoarea primului operand (a).
Operatorul de atribuire are prioritatea mai mic dect toi
operatorii prezentai.
i n cazul operatorului de atribuire acioneaz conversia
implicit de tip, tipul expresiei a=b este dat de tipul primului
operand (a).
Exist trei moduri n care poate fi folosit operatorul de atribuire:
- atribuirea simpl
- atribuirea multipl
- atribuirea cu operator

Atribuirea simpl.
Primul operand este un nume de variabil de memorie,
iar al doilea operand este o expresie.
nume_variabil=expresie;
Mod de execuie:
- se evalueaz expresia
- valoarea obinut se atribuie variabilei de memorie,
fcndu-se, dac este cazul, conversia de tip.
Instruciunea prin care unei variabile i se atribuie valoarea
unei expresii se numete instruciune de atribuire.

Atribuirea simpl.
Exemplu:
#include<iostream.h>
void main()
{unsigned x=5,y=2;
float a,b,c,d;
cout<<(a=5*x/y)<<endl; //12
b=5*(x/y); c=5.*x/y; d=5.*(x/y);
cout<<a<< <<b<< <<c<< <<d<<endl;
//12 10 12.5 10
a=5*(float)x/y; b=5*((float)x/y);
cout<<a<< <<b<<endl;} //12.5 12.5

Atribuirea simpl.
Tipul expresiei a=b este dat de tipul primului operand (a). Dac
tipul primului operand este inferior tipului celui de al doilea
operand, pot s apar pierderi de date (conversia implicit
de tip).
Exemplu:
#include<iostream.h>
void main()
{unsigned a=2000;
char c=a;
a=c; cout<<a<<endl;
//97
a=20; c=a; cout<<(unsigned)c<<endl; //20
a=2000; c=a; a=c;
cout<<(unsigned int)c<< <<a<<endl;} //65488 65488

Atribuirea simpl.
Dac unei variabile de tip ntreg i se atribuie
valoarea unei variabile reale, valoarea acesteia este
trunchiat.
Exemplu:
#include<iostream.h>
void main()
{int a;
float b=1.8, c=-2.7;
a=b; cout<<a<<endl;
a=c; cout<<a<<endl;}

//1
//-2

Atribuirea simpl.
Ce afieaz urmtoarele programe:
Program1:
#include<iostream.h>
void main()
{float x;
cout<<x=;cin>>x; //se citete 0.123
x=x*10; x=(x-(int)x)*10; x=(int)x/10.;
cout<<x<<endl;}
Program2:
#include<iostream.h>
void main()
{int a,b,x;
cout<<a=;cin>>a; cout<<b=; cin>>b;
x=a; a=b; b=x;
cout<<a<< <<b<<endl;}

Atribuirea multipl.
Deoarece operaia de atribuire simpl este o expresie,
rezultatul ei poate fi atribuit unei alte variabile de
memorie, rezultnd o nou expresie, al crei rezultat
poate fi atribuit unei alte variabile de memorie .a.m.d.,
rezultnd o atribuire multipl, prin care aceeai
valoare furnizat de o expresie se atribuie mai multor
variabile de memorie identificate prin nume1, nume2, ...
numen.

Atribuirea multipl.
nume1=nume2=...=numen-1=numen=expresie;
Mod de execuie:
- se evalueaz expresia;
- valoarea obinut se atribuie variabilei de memorie numen,
fcndu-se, dac este cazul, conversia de tip;
- coninutul variabiblei numen se atribuie variabilei de
memorie identificate cu numen-1, fcndu-se, dac este
cazul, conversia de tip;
- .a.m.d. Pn cnd coninutul variabilei de memorie nume2
se atribuie variabilei de memorie identificate cu nume1,
fcndu-se, dac este cazul, conversia de tip.

Atribuirea multipl.
Asociativitatea operatorilor de atribuire este de la dreapta la
stnga. Din aceast cauz, o expresie care foloseste atribuirea
multipl, de genul:
nume1=nume2=...=numen-1=numen=expresie1 =expresie2;
este greit, deoarece rezultatrul unei expresii nu poate fi atribuit
altei expresii.
Exemplu:

#include<iostream.h>

void main()
{unsigned int x,y;
float a;
a=x=y=5/2; cout<<a<<x<<y<<endl;
a=x=y=5./2; cout<<a<<x<<y<<endl;
x=y=a=5./2; cout<<a<<x<<y<<endl;}

//2 2 2
//2 2 2
//2.5 2 2

Atribuirea cu operator
Este de forma:
nume_variabil operator=expresie;
unde operator poate fi: +=, -=, *=, /=.
Modul de execuie:
- se evalueaz expresia;
- se aplic operatorul astfel: primul operand este numele
variabilei de memorie, iar al doilea operand este valoarea
expresiei, dac este cazul se face conversia de tip (v+=e;
v=v+e;);
- valoarea obinut se atribuie variabilei de memorie,
fcndu-se dac este cazul conversia de tip.

Atribuirea cu operator
Exemplu: #include<iostream.h>
void main()
{int a=10, b=20, c=30;
a+=b+c; cout<<a<<endl;
a=10; b=20; c=10;
a+=b+=c; cout<<a<<b<<endl;}

//60
//40 30

Observaie:
- se pot folosi atribuiri multiple cu operatori aritmetici

Operatorul condiional (?:)


Este singurul operator ternar i are sintaxa:
expresie1 ? expresie2 : expresie3
Mod de execuie:
- se evalueaz epresie1;
- dac valoarea obinut este diferit de 0
(adevrat), atunci se evalueaz expresie2, iar
expresie3 va fi ignorat, valoarea furnizat de
operator va fi valoarea expresiei expresie2;
- dac valoarea obinut este de 0 (fals),
atunci se evalueaz expresie3, iar expresie2 va fi
ignorat, valoarea furnizat de operator va fi
valoarea expresiei expresie3.

Operatorul condiional (?:)


Exemple:
1.
#include<iostream.h>
void main()
{int x;
cout<<x=; cin>>x;
cout<<modulul: <<(x>=0?x:-x)<<endl;}

Operatorul condiional (?:)


Observaie: Tipul rezultatului va fi determinat prin
conversie implicit. Dac tipul expresiei expresie3
este superior tipului expresiei expresie2, tipul
rezultatului este dat de expresie3, chiar dac se
evalueaz expresie2
2.

#include<iostream.h>
void main()
{int a=3;
float b=2;
cout<<(a>0?a:b)/2;}

//1.5

Operatorul condiional (?:)


3.

#include<iostream.h>
void main()
{int x;
cout<<x=; cin>>x;
cout<<(x%2==0?par:impar)<<endl;}

4.

#include<iostream.h>
void main()
{float x;
cout<<x=; cin>>x;
cout<<(int(x)==x?intreg\n:nu e intreg\n);}

Operatorul condiional (?:)


5.

#include<iostream.h>
void main()
{int a,b,c,max;
cout<<a=; cin>>a;
cout<<b=; cin>>b;
cout<<c=; cin>>c;
max=a;
max=max<b?b:max;
max=max<c?c:max;
cout<<maxim = <<max<<endl;}

Operatorul condiional (?:)


Observaie: Expresia care se evalueaz n operatorul
condiional poate fi tot un operator condiional, obinnduse structuri alternative simple imbricate.
n exemplul urmtor se citete un caracter, iar dac este
liter mic se transform n liter mare i invers, dac nu
este liter, rmne neschimbat.

6. #include<iostream.h>
void main()
{char c;
cout<<Dati caracterul: ; cin>>c;
cout<<(c>=a&&c<=z?(char)(c-32):
(c>=A&&c<=Z?(char)(c+32):c));}

Operatorul virgul (,)


Operatorul virgul poate fi folosit pentru construirea unei expresii
compuse din mai multe expresii:
expresie1, expresie2, expresie3, .... , expresien
Modul de execuie: - se evalueaz expresie1
- se evalueaz expresie2
- .a.m.d. se evalueaz expresien
Rezultatul i tipul rezultatului este dat de valoarea ultimei
expresii.
Asociativitatea operatorului virgul este de la stnga la dreapta.
Este operatorul cu cea mai mic prioritate.
Folosirea acestuia este util acolo unde sintaxa nu permite dect
o singur expresie i trebuie evaluate mai multe expresii
expresiile sunt legate prin operatorul virgul, formnd o singur
expresie.

Operatorul virgul (,)


Exemplu:
1. #include<iostream.h>
void main()
{int a=5,b=10;
float d,c;
c=a=++b, ++a, d=(float)a/b--, ++b;
cout<<a<<b<<c<<d<<endl; //12 11 11 1.090909
a=5, b=10;
cout<<(c=a=++b, ++a, d=(float)a/b--, ++b)/2;} //5

Operatorul dimensiune
Operatorul dimensiune sizeof este un operator unar.
Operandul poate fi o expresie sau un tip de dat.
sizeof(expresie)
sizeof(tip_dat)
Rezultatul returnat de acesta reprezint numrul de octei
utilizai pentru a memora valoarea expresiei sau tipul de
dat precizat.
Aplicarea operatorului dimensiune pe o expresie nu are
ca efect i evaluarea acesteia.

Operatorul dimensiune
Exemplu:
1. #include<iostream.h>
void main()
{int a=5,b=10;
float c;
cout<<sizeof(int)<< <<sizeof(float)<<endl;
cout<<sizeof(c*a++)<<sizeof(a/b--)<<endl;
cout<<a<< <<b<<endl;}
//5 10

Operatorii logici pe bii


Acioneaz asupra operanzilor de tip ntreg i execut
operaii logice la nivel de bii. Operatorii logici pe bii sunt:
- operatorul unar: ~ operatorul negare pe bii;
- operatori binari: de deplasare >> operatorul pentru
deplasarea la dreapta
<< operatorul pentru
deplasarea la stnga
& operatorul pentru I pe bii
^ operatorul pentru SAU exclusive pe bii
| operatorul pentru SAU pe bii

Precedena operatorilor logici pe bii este:


Operatorul unar are prioritate mai mare dect
operatorii binari;

Operatorii de deplasare au prioritate mai mare


dect ceilali operatori binari logici pe bii ;

Operatorul I (&) pe bii are prioritate mai mare


dect operatorul SAU exclusiv pe bii (^) care are
prioritate mai mare dect operatorul SAU pe bii (!).

Asociativitatea operatorilor logici pe bii binari cu


acelai nivel de prioritate este de la stnga la
dreapta.

Operatorii de deplasare au prioritate mai mic


dect operatorii aritmetici, dar mai mare dect
operatorii relaionali. Ceilali operatori binari logici pe
bii au prioritate mai mic dect operatorii relaionali,
dar mai mare dect operatorii logici.

Operatorii de deplasare

Operatorul de deplasare la stnga a<<n


deplaseaz toi biii operandului a cu n poziii la
stnga. Primii n bii se pierd, iar cele n poziii rmase
libere n dreapta sunt completate cu 0.
Operatorul de deplasare la dreapta a>>n
deplaseaz toi biii operandului a cu n poziii la
dreapta. Ultimii n bii se pierd, iar cele n poziii
rmase libere n stnga sunt completate cu 0.

Observaii :
Deplasarea a n bii la dreapta n operandul a
este echivalent cu ctul mpririi operandului a la 2n.
2.
Deplasarea a n bii la stnga n operandul a este
echivalent cu nmulirea operandului a cu 2n.
3.
Pentru a afia rezultatul operaiei de deplasare
la stnga a<<n, trebuie s ncadrai expresia ntre
paranteze rotunde : corect este cout<<(a<<n) ; i nu
cout<<a<<n ; La fel se procedeaz pentru afiarea
rezultatului operaiei de deplasare la dreapta a>>n.
1.

Exemplu :
#include<iostream.h>
void main()
{ int a=60,n=3;
cout<<(a>>n)<<endl;
}
a nainte de deplasare
00111100

// se afieaz 7

a>>>n

a dup deplasare
00000111

#include<iostream.h>
void main()
{ int a=15,n=3;
cout<<(a<<n)<<endl;
}
a nainte de deplasare
00001111

// se afieaz 120

a dup deplasare
a<<n
01111000

Operatorul pentru negare pe bii


Operatorul pentru negare pe bii ~a neag fiecare bit
al operandului a, astfel : ~1=0 i ~0=1
Exemplu
#include<iostream.h>
void main()
{ unsigned int a=0xF2F, b=0x5;
cout<<(~a)<< <<(~b); // se afieaz 61648 65530
}
b nainte de negarea pe bii
00000101
~b

b dup negarea pe bii


11111010

Operatorul I pe bii
Operatorul I pe bii a&b aplic operatorul logic I pe perechile de bii
de pe aceiai poziie din cei doi operanzi a i b: dac ambii bii sunt 1,
rezultatul este 1, altfel este 0.
Exemplu
#include<iostream.h>
void main()
{ unsigned int a=0xF2F, b=0x5;
cout<<(a&b);
}
a
0000111100101111
b
0000000000000101
a&b 0000000000000101

// se afieaz 5

Operatorul SAU exclusiv pe bii


Operatorul SAU exclusiv pe bii a^b aplic operatorul logic SAU exclusiv
pe perechile de bii de pe aceiai poziie din cei doi operanzi a i b :
dac ambii bii au aceiai valoare, rezultatul este 0, altefel este 1.
Exemplu
#include<iostream.h>
void main()
{ unsigned int a=0xF2F, b=0x5;
cout<<(a^b);
}
a
0000111100101111
b
0000000000000101
a^b 0000111100101010

// se afieaz 3882

Operatorul SAU pe bii


Operatorul SAU pe bii a|b aplic operatorul logic SAU pe perechile
de bii de pe aceiai poziie din cei doi operanzi a i b : dac ambii bii
au vaoarea 0, rezultatul este 0, altefel este 1.
Exemplu
#include<iostream.h>
void main()
{ unsigned int a=0xF2F, b=0x5;
cout<<(a|b);
}
a
b
a|b

0000111100101111
0000000000000101
0000111100101111

// se afieaz 3887

Precedena operatorilor
Nivel

Categoria

Operatori

Prioritate maxim

Parantezele (), apelul de funcii

Operatori unari

+ ++ -!
sizeof
(tip)

Operatori aritmetici de multiplicare

* / %

Operatori aritmetici adiionali

+ -

Operatori relaionali pt. inegaliti

< <= > >=

Operatori relaionali pt. egalitate

== !=

Operatori logici - i logic

&&

Operatori logici - sau logic

||

Operator condiional

?:

10

Operatori de atribuire

=
+= -= *= /=

11

Operator virgul

Funcii de sistem
Funcia

Tip rezultat

Tip parametru

Furnizeaz

Exemplu

abs(x)
fabs(x)

int
Double

Int
double

modulul

abs(-14)=14
fabs(-2.3)=2.3

floor(x)
floorl(x)

double
long double

double
long double

cel mai apropiat


ntreg <=x

floor(11.5)=11
floor(-2.8)=-3

ceil(x)
ceill(x)

double
long double

double
long double

cel mai apropiat


ntreg >=x

ceil(11.5)=12
ceil(-2.8)=-2

sin(x)

double

double

sinus de x

sin(0.5)=0.479426

cos(x)

double

double

cosinus de x

cos(0.5)=.877583

tan(x)

double

double

tangent de x

tan(0.5)=.546302

sqrt(x)

double

double

radical de ordinul
2 din x

sqrt(9)=3

pow(x,y)
pow10(x)

double
double

double
double

x la puterea y
10 la puterea x

pow(2,3)=8
pow10(3)=1000

Vous aimerez peut-être aussi