Logo Încarcă | Propune
Conecteaza-te arrow

Operatori si expresii in limbajul C++

 OPERATORI sI EXPRESII in C++

Datele (constante sau variabile) legate prin operatori, formeaza expresii. Operatorii care pot fi aplicati datelor (operanzilor) depind de tipul operanzilor, datorita faptului ca tipul unei date consta intr-o multime de valori pentru care s-a adoptat un anumit mod de reprezentare in memoria calculatorului si o multime de operatori care pot fi aplicati acestor valori.

Operatorii pot fi:

  • unari (necesita un singur operand);
  • binari (necesita doi operanzi);
  • ternari (trei operanzi).

O expresie este o combinatie corecta din punct de vedere sintactic, formata din operanzi si operatori. Expresiile, ca si operanzii,au tip si valoare.

OPERATORI

  • Operatorul unar adresa &, aplicat identificatorului unei variabile, furnizeaza adresa la care este memorata aceasta. Poate fi aplicat oricarui tip de date si se mai numeste operator de referentiere.

Exemplu:

int a;

cout<<"Adresa la care este memorata variabila a este:"<<&a;

    Operatorul de atribuire(de asignare) este un operator binar care se aplica tuturor tipurilor de variabile. Este folosit sub formele urmatoare:

           nume_variabila=expresie;

sau:      expresie1=expresie2;

Se evalueaza expresia din membrul drept, iar valoarea acesteia este atribuita variabilei din membrul stang. Daca tipurile membrilor stang si drept difera, se pot realiza anumite conversii, prezentate in paragraful.

 

Exemplu:

float x; int a,b; x=9.18;

a=b=10;

int s; s=a+20*5;            //rezultat: s=110

s=x+2;                     //rezultat s=11, deoarece s este int.

 

Asa cum se observa in linia a 2-a din exemplul precedent, operatorul de atribuire poate fi utilizat de mai multe ori in aceeasi expresie. Asociativitatea operatorului are loc de la dreapta la stanga. Astfel, mai intai b=10, apoi a=b.

 

Exercitiu:  Sa se scrie urmatorul program si sa se urmareasca rezultatele executiei acestuia.

#include

void main()

{

float x,y=4.25;   char car=’A’; int a,b,c;

cout<<”Val. lui y este:”<<<’\n’;          //Afisare: Val. lui y este:4.25

x=y; cout<<”Val. lui x este:”<<’\n’;   //Afisare: Val. lui x este:4.25

a=x;cout<<”Val.lui a este:”<<’\n’; //Afisare:Val. lui a este:4, deoarece a de tip int!!!

c=b=a; cout<<”b=”<<”\tc=”<<’\n’;        //Afisare: b=4     c=4

cout<<”Introduceti val. lui c:”; cin>>c;      // citire val. pentru c

cout<<”Val. lui c este:”<<’\n’;           //Afisare: Val. lui c este:4

}

 

Operatorul poate fi aplicat tipurilor de date intregi, reale, caracter, si chiar siruri de caractere, asa cum vom vedea in capitolele urmatoare (exemplu: char sir [10]=”a5dfgthklj”).

 

Operator        Semnificatie                                       Exemple

-                     Minus unar                                         -a

++                   Operator de incrementare                   a++      sau

                       (aduna 1 la valoarea operandului)      ++a

--                   Operator de decrementare                  a--        sau

                       (scade 1 din valoarea operandului)     --a

 

Exemplu:

     int a,b;    cout<<”a=”<<-a<<’\n’;   b=-a;

               cout<<”b=”<<<’\n’;

Operatorul - unar poate fi aplicat datelor intregi, reale, caracter. 

 

Ambii operatori pot fi folositi in forma prefixata, inaintea operandului, (++a, respectiv --a) sau postfixata, dupa operand(a++, respectiv a--).

Operatorul de decrementare --care poate fi folosit in forma prefixata (--a) sau postfixata (a--).

 

Utilizarea acestor operatori in expresii, in forma prefixata sau postfixata,determina evaluarea acestora in moduri diferite, astfel:

 

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

                                                           y=x;

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

x=x+1;

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

                                                           y=x;

y=x--               este echivalent cu:       y=x;

x=x-1;

 

Exercitiu:  Sa se scrie urmatorul program si sa se urmareasca rezultatele executiei acestuia.

#include

void main()

{ int a=9; cout<<”a++=”<<<’\n’;      //Afisare: a++=9

cout<<”a=”<<<’\n’;             //Afisare: a=10

a=9;                             //Revenire in situatia anterioara

cout<<”++a=”<<++a<<’\n’;          //Afisare: ++a=10

cout<<”a=”<<<’\n’;             //Afisare: a=10

a=9; cout<<”a--=”<<<’\n’;     //Afisare: a--=9

cout<<”a=”<<<’\n’;             //Afisare: a=8

a=9;                            //Revenire in situatia anterioara

cout<<”--a=”<<--a<<’\n’;          //Afisare: --a=8

cout<<”a=”<<<’\n’;             //Afisare: a=8

int z,x=3; z=x++-2;

cout<<”z=”<<<’\n’;             //Afisare: z=1

cout<<"x=”<<<’\n’;             //Afisare: x=4

x=3; z=++x-2; cout<<”z=”<<<’\n’;//Afisare: z=2

cout<<"x=”<<<’\n’;             //Afisare: x=4

}

Operator                    Semnificatie                                                   Exemple

+                     Adunarea celor doi operanzi                                      a+b

-                     Scaderea celor doi operanzi                                       a-b

*                     inmultireacelor doi operanzi                                     a*b

/                     impartireacelor doi operanzi                                     a/b

%                    Operatorul modulo (operatorul rest)                           a%b

                       (furnizeaza restul impartirii operatorului stang la operatorul drept).

 

Operatorul modulo se aplica numai operanzilor intregi (de tip int sau char). Ceilalti operatori aritmetici binari pot fi aplicati datelor intregi sau reale.

Daca intr-o expresie cu 2 operanzi si un operator binar aritmetic, ambii operanzi sunt intregi, rezultatul expresiei va fi tot un numar intreg. De exemplu, la evaluarea expresiei 9/2, ambii operanzi fiind intregi, rezultatul furnizat este numarul intreg 4.

Operatorii prezentati respecta o serie de reguli de precedenta (prioritate) si asociativitate, care determina precis modul in care va fi evaluata expresia in care acestia apar. in tabelul 2.3 sunt prezentati operatorii anteriori, in ordinea descrescatoare a prioritatii. Precedenta operatorilor poate fi schimbata cu ajutorul parantezelor.

 

Tabelul 2.3.

 

 

Clasa de operatori

Operatori

Asociativitate

Unari

-  (unar)      ++       --

de la dreapta la stanga

Multiplicativi

*     /    %

de la stanga la dreapta

Aditivi

+      -

de la stanga la dreapta

Atribuire

=

de la dreapta la stanga

 

Exercitiu:  Sa se scrie urmatorul program si sa se urmareasca rezultatele executiei acestuia.

#include

void main()

{

int rezult, a=20,b=2,c=25,d=4; rezult=a-b;

cout<<”a-b=”<<<’\n’;                  // Afisare: a-b=18

rezult=a+b; cout<<”a+b=”<<<’\n’;       // Afisare: a+b=22

rezult=a*b;cout<<”c*b=”<<<’\n’;        // Afisare: c*b=50

rezult=a/d; cout<<”a/d=”<<<’\n’;       // Afisare: a/d=5

rezult=c%b; cout<<”c%b=”<<<’\n’;              // Afisare: c%b=1

rezult=c/b*d; cout<<”c/b*d=”<<<’\n’;   // Afisare: c/b*d=48

rezult= -b+a; cout<<”-b+a=”<<<’\n’;     // Afisare: -b+a=18

rezult= -(b+a); cout<<”-(b+a)=”<<<’\n’;// Afisare: -(b+a)=-22

rezult=b+c*d;cout<<”b+c*d=”<<<’\n’;     // Afisare: b+c*d=102

rezult=(b+c)*d;cout<<”(b+c)*d=”<<<’\n’;// Afisare: (b+c)*d=108

}

 

Operator                    Semnificatie                Exemple

+=                               a=a+b                          a+=b

-=                               a=a+b                          a-=b

*=                               a=a*b                          a*=b

/=                               a=a/b                           a/=b

%=                             a=a%b                         a%=b

Acesti operatori se obtin prin combinarea operatorilor aritmetici binari cu operatorul de atribuire si sunt folositi sub forma urmatoare:

 expresie1  operator= expresie2;

Rezultatul obtinut este acelasi cu rezultatul obtinut prin:

     expresie1 = expresie1  operator  expresie2;

Toti acesti operatorii modifica valoarea operandului stang prin adunarea, scaderea, inmultirea sau impartirea  acestuia prin valoarea operandului drept.

Constructia x+=1 genereaza acelasi rezultat ca expresia x=x+1.

Observatiile referitoare la operatorii aritmetici binari sunt valabile si pentru operatorii aritmetici binari compusi. Operatorii aritmetici binari compusi au aceeasi prioritate si asociativitate ca si operatorul de atribuire.

 

Exercitiu:  Sa se scrie urmatorul program si sa se urmareasca rezultatele executiei acestuia.

#include

void main()

{

int a,b; float c=9.3; a=3; b=8;   

cout<<”a=”<<<’\n’;             //Afisare  a=3

a+=b; cout<<”a=”<<<’\n’;        //Afisare  a=11

a-=b; cout<<”a=”<<<’\n’;        //Afisare  a=-5

a*=b; cout<<”a=”<<<’\n’;        //Afisare  a=24

a/=b; cout<<”a=”<<<’\n’;        //Afisare  a=0

a%=b; cout<<”a=”<<<’\n’;        //Afisare  a=3

}

           

Operator                    Semnificatie                           Exemple

==                               Egal cu                                               a==b

!=                               Diferit de                                a!=b

<                                 Mai mic decat                         a

<=                               Mai mic sau egal                     a<=b

>                                 Mai mare decat                                   a>b

>=                               Mai mare sau egal                   a>=b

Primii doi operatori mai sunt numiti operatori de egalitate. Operatorii relationali servesc la compararea valorilor celor doi operanzi si nu modifica valorile operanzilor. Rezultatul unei expresii in care apare unul din operatorii relationali binari este intreg si are valoarea zero (0) daca relatia este falsa, sau valoarea unu (1) (sau diferita de 0 in cazul compilatoarelor sub UNIX), daca relatia este adevarata. Acesti operatorii pot fi aplicati datelor de tip intreg, real sau char.

Regulile de precedenta si asociativitate ale acestor operatori sunt prezentate in tabelul 2.4.

 

Tabelul 2.4.

 

 

Clasa de operatori

Operatori

Asociativitate

Unari

-  (unar)      ++       --

de la dreapta la stanga

Multiplicativi

*     /    %

de la stanga la dreapta

Aditivi

+      -

de la stanga la dreapta

Atribuire

=

de la dreapta la stanga

Relationali

<   <=   >   >=

de la stanga la dreapta

De egalitate

==   !=

de la stanga la dreapta

Atribuire si aritmetici binari

=    *=    /=    %=    +=    -=

de la dreapta la stanga

 

Observatie: Deosebirea dintre operatorii ==(relational, de egalitate) si =(de atribuire) consta in faptul ca primul nu modifica valoarea nici unuia dintre operanzii sai, pe cand cel de-al doilea modifica valoarea operandului stang (vezi exemplul urmator)

 

Exercitiu:  Sa se scrie urmatorul program si sa se urmareasca rezultatele executiei acestuia.

#include

void main()

{

int a=1, b=20, lim=100; int rezult; rezult=a

cout<<”a<<<’\n’;       

// Afisare:  a

rezult=a<=b;                      

//operatorul realtional <= are prioritate mai mare decat cel de atribuire

cout<<”a<=b=”<<<’\n’;

// Afisare:  a

rezult=a>b; cout<<”a>b=”<<<’\n’;       // Afisare:  a

rezult=a+10>=lim; cout<<”a+10>=lim=”<<<’\n’;      

/* Operatorul + are prioritate mai mare decat operatorul >= .   Afisare:  a+10>=lim=0 */

rezult=a+(10>=lim);    cout<<”a+(10>=lim)=”<<<’\n’;

/* Schimbarea prioritatii operatorilor prin folosirea parantezelor;  Afisare:  a+(10>=lim)=1  */

rezult=a==b;

cout<<”a==b=”<<<’\n’;      // Afisare:  a==b=0

cout<<”a=”<<<’\n’;             // Afisare:  a=1

cout<<”b=”<<<’\n’;             // Afisare:  b=20

rezult=a=b; cout<<”a=b=”<<<’\n’;  // Afisare:  a=b=20

cout<<”a=”<<<’\n’;             // Afisare:  a=20

cout<<”b=”<<<’\n’;             // Afisare:  b=20

rezult=5>b>10;cout<<”b=”<<<’\n’;// Afisare:  b=20

cout<<”5>b>10=”<<<’\n’;     //Echivalent cu (5>b)>10 Afisare:  5>b>10=0   

}

 

Operator                    Semnificatie                                                   Exemple

!                                 Not (negatie logica)                                       !(a==b)

&&                               And (conjunctie, si logic)                               (a>b) && (b>c)

||                               Or(disjunctie, sau logic)                                (a>b) || (b>c)

Acesti operatori pot fi aplicati datelor de tip intreg, real sau caracter. Evaluarea unei expresii in care intervin operatorii logici se face conform tabelului 2.5.

 

Tabelul 2.5.

 

 

 

 

x

y

!x

x&&y

x||y

adevarat (1)

adevarat (1)

fals (0)

adevarat (1)

adevarat (1)

adevarat (1)

fals (0)

fals (0)

fals (0)

adevarat (1)

fals (0)

adevarat (1)

adevarat (1)

fals (0)

adevarat (1)

fals (0)

fals (0)

adevarat (1)

fals (0)

fals (0)

Expresia   !expresie are valoarea 0 (fals) daca expresia-operand are o valoare diferita de zero si valoarea unu (adevarat) daca expresia-operand are valoarea zero.

Expresia   expresie1||expresie2 are valoarea diferita de 0 (true) daca FIE expresie1, FIE expresie2 au valori diferite de zero.

Expresia   expresie1 && expresie2 are valoarea diferita de 0 (true) daca AMBELE expresii-operand ( expresie1 si expresie2) au valori diferite de zero.

 

Exercitiu:  Sa se scrie urmatorul program si sa se urmareasca rezultatele executiei acestuia.

#include

void main()

{ int a=0, b=10, c=100, d=200; int rezult; rezult=a&&b;

cout<<”a&&b=”<<<’\n’;            //Afisare  a&&b=0

rezult=a||b; cout<<”a||b=”<<<’\n’;//Afisare  a||b=1 (sau valoare nenula)

rezult=!a;cout<<”!a=”<<<’\n’;    //Afisare  !a=1 (sau valoare nenula)

rezult=!b; cout<<”!b=”<<<’\n’;    //Afisare  !b=0

rezult=(a>b) || (b>c);cout<<”(a>b) || (b>c)=”<<<’\n’;

//Afisare (a>b) || (b>c) =1(sau valoare nenula)

rezult=!(c<<”!(c<<<’\n’;//Afisare  !(c>d)=0

rezult=(a-b)&&1;cout<<”(a-b)&&1=”<<<’\n’;

//Afisare (a-b)&&1 =1(sau valoare nenula)

rezult=d||b&&a;cout<<”d||b&&a=”<<<’\n’;//Afisare d||b&&a =1

}// in evaluarea expresiilor din exemplu, s-au aplicat prioritatile operatorilor, indicate in tabelul. 2.6.

Tabelul 2.6.

 

 

Clasa de operatori

Operatori

Asociativitate

Unari

!   - (unar)      ++       --

de la dreapta la stanga

Multiplicativi

*     /    %

de la stanga la dreapta

Aditivi

+      -

de la stanga la dreapta

Atribuire

=

de la dreapta la stanga

relationali

<   <=   >   >=

de la stanga la dreapta

de egalitate

==   !=

de la stanga la dreapta

logici

&&

de la stanga la dreapta

logici

||

de la stanga la dreapta

atribuire si aritmetici binari

=    *=    /=    %=    +=    -=

de la dreapta la stanga

 

Exercitiu:Sa se scrie un program care citeste un numar real si afiseaza 1 daca numarul citit apartine unui interval ale carui limite sunt introduse tot de la tastatura, sau 0 in caz contrar.

#include

void main()

{    

double lmin, lmax, nr;cout<<"Numar=";cin>>nr;

cout<<”Limita inferioara a intervalului:”; cin>>lmin;

cout<<”Limita superioara a intervalului:”; cin>>lmax;

cout<<(nr>=lmin && nr<=lmax);}

 

Operator        Semnificatie                                                   Exemple

~                     Negatie (cod complementar fata de unu)                   ~a

&                     AND (Conjunctie, si logic pe bit                                a & 0377

|                     OR(Disjunctie, sau logic pe bit)                                a | 0377

^                     XOR (Sau exclusiv logic pe bit)                                 a^b

<<                   Deplasare stanga                                            0377 << 2

>>                   Deplasare dreapta                                           0377 >> 2

 

Acesti operatori nu se aplica numerelor reale, ci numai datelor de tip intreg sau caracter. Primul operator este unar, ceilalti binari. Operatorii actioneaza la nivel de bit, la nivelul reprezentarii interne (in binar), conform tabelelului 2.7.

 

Tabelul 2.7.

 

 

 

 

 

x

y

x&y

x | y

x^y

~x

1

1

1

1

0

0

1

0

0

1

1

0

0

1

0

1

1

1

0

0

0

0

0

1

 

Operatorul ~ are aceeasi prioritate casiceilalti operatori unari. El furnizeaza complementul fata de unu al unui intreg, adica va schimba fiecare bit de pe 1 in zero si invers. Operatorii de deplasare pe bit (<>) efectueaza deplasarea la stanga sau la dreapta a operandului stang, cu numarul de biti indicati de operandul drept. Astfel, x<<2 deplaseaza bitii din x la stanga, cu doua pozitii, introducand zero pe pozitiile ramase vacante.

Exemple:

int a=3;   //Reprezentare interna a lui a (pe 2 octeti):     0000000000000011

int b=5;       //Reprezentare interna a lui b (pe 2 octeti):     0000000000000101

int rez=~a;

cout<<"~"<<<'='<<<'\n';//~3= -4

//Complementul fata de unu este: 1111111111111100  (in octal: 0177777774  (!a= - 4)

rez=a & b; cout<<<'&'<<<'='<<<'\n';//3&5=1

//a&b=0000000000000001 =1

rez=a^b; cout<<<'^'<<<'='<

//a ^b = 0000000000000110

rez=a|b; cout<<<'|'<<<'='<

//a | b = 0000000000000111

rez=a<<2; cout<<<"<<"<<3<<'='<<<2=16=2*2

//a<<2= 0000000001100000

rez=5>>2; cout<<<">>"<<2<<'='<>2=1=5/2

//b>>2= 0000000000000001

 

Operatorul binar ^  isi gaseste o utilizare tipica in expresii ca: x&^077, care mascheaza ultimii 6 biti ai lui x pe zero.

Operatorul & este adesea utilizat in expresii ca x&0177, unde seteaza toti bitii pe zero, cu exceptia celor de ordin inferior din x.

Operatorul | este utilizat in expresii ca: x&MASK, unde seteaza pe unu bitii care in x si masca MASK sunt setati pe unu.

Operatorii logici pe bit & si | sunt diferiti de operatorii logici && si || (pe cuvant).

Deplasarea la stanga a unei date cu n pozitii este echivalenta cu inmultirea valorii acesteia cu 2. Deplasarea la dreapta a unei date fara semn cu n pozitii este echivalenta cu impartirea valorii acesteia cu 2.

Combinand operatorii logici pe bit cu operatorul de atribuire, se obtin operatorii:

&=, ^=, |=, <<=, >>=.

 

Este un operator ternar (necesita 3 operanzi), utilizat in constructii de forma:

expresie1?expresie2:expresie3

 

Se evalueaza expresia1. Daca aceasta are o valoare diferita de zero, atunci tipul si valoarea intregii expresii vor fi aceleasi cu tipul si valoarea expresiei2. Altfel (daca expresie1 are valoarea zero), tipul si valoarea intregii expresii vor fi aceleasi cu tipul si valoarea expresiei3. Deci operatorul conditional este folosit pentru a atribui intregii expresii tipul si valoarea expresiei2 sau a expresiei3, in functie de o anumita conditie. Acest lucru este echivalent cu:

Dacaexpresie1 diferita de zero

Atuncievalueaza expresie2

Altfelevalueaza expresie3

Exemplu:

     int semn=(x<0)?-1:1

Dacax<0, atuncisemn=-1, altfelsemn=1.

 

Este utilizat in constructii de forma:

expresie1 , expresie2

Operatorul virgula forteaza evaluarea unei expresii de la stanga la dreapta. Tipul si valoarea intregii expresii este data de tipul si valoarea expresiei2. Operatorul virgula este folosit in instructiunea for. Operatorul virgula are cea mai mica prioritate.

Exemplu:

int x, c, y;

cout<<”Astept val. ptr. y:”; cin>>y;

x=(c=y, c<=5);   /* c va primi valoarea lui y (citita); se verifica daca c este mai mic sau

egal cu 5. Daca nu, x=0; daca da, x=1 sau x=valoare diferita de zero)*/

x++, y--;                 //intai este incrementat x, apoi este decrementat y

Este un operator unar, care are ca rezultat numarul de octeti pe care este memorata o data de un anumit tip. Operandul este un tip sau o data (constanta sau variabila) de un anumit tip.

Exemple:

      cout<

     cout<

 

Este un operator unar care apare in constructii numite ”cast” si converteste tipul operandului saula tipul specificat intre paranteze.

Exemple:

     int a; (float) a;// converteste operandul a (care era de tip intreg) in float

           

in afara operatorilor prezentati, exista si altii, pe care ii vom enumera in continuare. Despre acesti operatori vom discuta in capitolele viitoare, cand cunostintele acumulate vor permite acest lucru.

 

Este operator unar, numit si operator de deferentiere. Se aplica unei expresii de tip pointer si este folosit pentru a accesa continutul unei zone de memorie spre care pointeaza operatorul. Operatorii & (adresa) si * sunt complementari.

Exemplu:Expresia *a este inlocuita cu valoarea de la adresa continuta in variabila pointer a.

 

Parantezele rotunde ( )se utilizeaza in expresii, pentru schimbarea ordinii de efectuare a operatiilor, sau la apelul functiilor. La apelul functiilor, parantezele rotunde incadreaza lista parametrilor efectivi. Din acest motiv, parantezele rotunde sunt numite si operatori de apel de functie.

Exemplu:

     double sum(double a, double b);   

/*declar. functiei sum, care primeste 2 argumente reale(double) si returneaza o valoare tip double */

     void main()

      {

      . . .

      double a=sum(89.9, 56.6);  //apelul functiei sum, cu parametri efectivi 89.9 si 56.6

            int s0=6; double s1=(s0+9)/a;//folosirea parantezelor in expresii

      . . .

      }

 

Operatorii de indexaresunt parantezele patrate []. Acesteainclud expresii intregi care reprezinta indici ai unui tablou.

           

Operatorii ::, .,->, .* si ->*permit accesul la componentele unei structuri. Ei vor fi studiati in capitolul 7.

 

in tabelul 2.8. sunt prezentati toti operatorii, grupatipe categorii, cu prioritatile lor si regulile de asociativitate. Operatorii dintr-o categorie au aceeasi prioritate.

 

Tabelul 2.8.

 

 

Nr.

Clasa de operatori

Operatori

Asociativitate

1.

Primari

() [] . ->  ::

de la stanga la dreapta

2.

Unari

! ~ ++ -- sizeof  (tip)

-(unar)  *(deferentiere)&(referentiere)

de la stanga la dreapta

3.

Multiplicativi

*     /     %

de la stanga la dreapta

4.

Aditivi

+     -

de la stanga la dreapta

5.

Deplasare pe bit

<<     >>

de la stanga la dreapta

6.

Relationali

<    <=    >    >=

de la stanga la dreapta

7.

De egalitate

==     !=

de la stanga la dreapta

8.

 

& (sI logic pe bit)

de la stanga la dreapta

9.

 

^ (XOR pe bit)

de la stanga la dreapta

10.

 

| (SAU logic pe bit)

de la stanga la dreapta

11.

 

&&

de la stanga la dreapta

12.

 

||

de la stanga la dreapta

13.

Conditional

?:

de la dreapta la stanga

14.

De atribuire

=   +=   -=   *=    %=

&=  ^=  |=  <<=  >>=

de la dreapta la stanga

15.

Virgula

,

de la stanga la dreapta

 

 

2.6.2.  EXPRESII

Prin combinarea operanzilor si a operatorilor se obtin expresii. Tipul unei expresii este dat de tipul rezultatului obtinut in urma evaluarii acesteia. La evaluarea unei expresii se aplica regulile de prioritate si asociativitate a operatorilor din expresie. Ordinea de aplicare a operatorilor poate fi schimbata prin folosirea parantezelor. La alcatuirea expresiilor, este indicata evitarea expresiilor in care un operand apare de mai multe ori.

                                                                        

2.6.3.  CONVERSII DE TIP                                                                                                          

La evaluarea expresiilor, se realizeaza conversii ale tipului operanzilor. Conversiile sunt:

           

Conversiile automatesunt realizate de catre compilator:

            char, short int->   int

Ele sunt realizate de fiecare data cand intr-o expresie apar operanzi de tipul char sau short int.

Conversiile cerute de evaluarea expresiilorsunt efectuate in cazurile in care in expresii apar operanzi de tipuri diferite. inaintea aplicarii operatorilor, se realizeaza conversia unuia sau a ambilor operanzi:

Conversiile explicite (cerute de programator)se realizeaza cu ajutorul constructiilor cast.

Exemplu:

      int x=3;    float y;          y=(float)x/2;

inainte de a se efectua impartirea celor 2 operanzi, operandul x (intreg) este convertit in numar real simpla precizie. Dupa atribuire, valoarea lui y va fi 1.5. Daca nu ar fi fost folosit operatorul de conversie in expresia y=x / 2, operanzii x si 2 fiind intregi, rezultatul impartirii este intreg, deci y ar fi avut valoarea 1.


Chestiuni aplicative

 

  1. Sa se scrie un program care afiseaza urmatoarele mesaje:
    • Sirul "este dupa-amiaza" este memorat pe .... octeti.
    • O marime intreaga este memorata pe ... octeti.
    • O marime reala, in simpla precizie este memorata pe ... octeti!
    • O marime reala, in dubla precizie este memorata pe ... byti!
    • Constanta caracter 'Q' memorata pe ... octeti!
    • Sirul "a\n\n" este memorat pe ... octei!
    • Sirul "\n" este memorat pe ... biti!
    • Caracterul '\' este memorat pe .... biti.
  2. Sa se evalueze expresiile, stiind ca: int i=1;int j=2;int k=-7;double x=0;double y=2.3;
    • -i - 5 * j  >= k + 1
    • 3 < j < 5
    • i + j + k == -2 * j
    • x && i || j - 3
  3. Ce operatie logica si ce masca trebuie sa folositi pentru a converti codurile ASCII ale literelor mici in litere mari? Dar pentru conversia inversa?
  4. O deplasare la dreapta cu 3 biti este echivalenta cu o rotatie la stanga cu cati biti?
  5. Sa se seteze pe 1 toti bitii dintr-un octet, cu exceptia bitului cel mai semnificativ.
  6. Sa se scrie un program care citeste o valoare intreaga. Sa se afiseze un mesaj care sa indice daca numarul citit este par sau impar.
  7. Sa se citeasca doua valori intregi. Sa se calculeze si sa se afiseze restul impartirii celor doua numere.


Cuvinte cheie: how to use data in C++, cum sa folosim datele in C++, using data in C++, commands and expresions in C++, comenzi si expresii in C++, operands in C++, operanzi in C++, displaying data in C++, afisarea datelor in C++, binary and ternary operators, operatori binari si ternari, steps for evaluating expresions in C++, pasi pentru evaluarea expresiilor in C++


Detalii:
De acelasi autor:
Autor: Cristy - Trimite mesaj autorului
Categoria: C




Comentarii:
Nume/Prenume
Email
Mesaj
Din păcate, momentan, nu sunt comentarii...
© Biblioteca de tutoriale Limbă - Aplicaţii - Realizatori- Tutoriale - Contact - Privacy Policy