expresii - operatori

Click here to load reader

  • date post

    10-Apr-2016
  • Category

    Documents

  • view

    324
  • download

    4

Embed Size (px)

description

c++

Transcript of expresii - operatori

  • 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 operand(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 precedena este cea aritmetic

  • Operatorii aritmeticiObservaii: 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 aritmeticiExemplu: #includevoid main(){int a=10,c=3; float b=10; cout
  • Operatorii aritmeticiObservaii: 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|

    aba / ba % b> 0> 0cr> 0< 0 cr< 0> 0- c- r< 0< 0c- r

  • Operatorii aritmeticiExemplu: #includevoid main(){int a=7,b=3; cout
  • Operatorii aritmetici4. 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: #includevoid main(){int a=7,b=3; cout

  • Operatorii aritmetici5. 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 aritmeticiExemplu: #includevoid main(){float a=1; char b=a; cout
  • Operatorul de conversie explicitConversia 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 explicitExemplu:#includevoid main(){int a=7, b=2; float x=-1.5; cout
  • Operatorii de incrementare i decrementareSunt 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 decrementareExemplu:#includevoid main(){int a=1,b=2; cout
  • Operatorii relaionaliSunt 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 relaionaliExemplu: #includevoid main(){int a=2,b=3; cout
  • Operatorii logiciExist 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 logiciExemplu: #includevoid main(){float x=2.5; int a=0,b=2,c=3; cout
  • Operatorii logiciObservaii:- 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 logiciExemplu: #includevoid main(){int a=0,b=1; cout
  • Operatorii de atribuireOperatorul 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: #includevoid main(){unsigned x=5,y=2; float a,b,c,d; cout
  • 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: #includevoid main(){unsigned a=2000; char c=a; a=c; cout
  • Atribuirea simpl.Dac unei variabile de tip ntreg i se atribuie valoarea unei variabile reale, valoarea acesteia este trunchiat.

    Exemplu: #includevoid main(){int a; float b=1.8, c=-2.7; a=b; cout

  • Atribuirea simpl.Ce afieaz urmtoarele programe:Program1: #includevoid main(){float x; coutx;//se citete 0.123 x=x*10; x=(x-(int)x)*10; x=(int)x/10.; cout
  • Atribuirea