Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori...

76
Conventii lexicale: In limbajul C++ exista 5 categorii lexicale (tokens) = entitati lingvistice care au semnificatie sintatica pentru compilator: 1. Nume (name) / Identificatori (identifiers) 2. Cuvinte cheie (keywords) 3. Literale (literals)/ constante 4. Operatori (operators) 5. Semne de punctuatie (punctuators), incluzand: Separatori (separators)

Transcript of Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori...

Page 1: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale:

In limbajul C++ exista 5 categorii lexicale (tokens) = entitati lingvistice

care au semnificatie sintatica pentru compilator:

1. Nume (name) / Identificatori (identifiers)

2. Cuvinte cheie (keywords)

3. Literale (literals)/ constante

4. Operatori (operators)

5. Semne de punctuatie (punctuators), incluzand: Separatori

(separators)

Page 2: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

Spatii albe (white spaces) → multimea caracterelor:

• spatiu (blank),

• tabulatori orizontali si verticali (tabs),

• linie noua (new line),

• caractere de formatare (formfeeds) si

• comentariile (def.: /* sir caractere */ sau // linie )

Spatii albe sunt ignorate si eliminate din codul sursa in etapa de

compilare, cu exceptia situatiei când folosesc pentru separarea a 2

entitati lexicale.

Un spatiu alb este necesar pentru separarea identificatorilor, a

cuvintelor-cheie si a constantelor.

Page 3: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

1. Nume (name) / Identificatori (identifiers) → secventa de lungimeoarecare de litere si cifre, primul caracter sa fie litera sauunderscore (’_’).

Obs.: C++ este limbaj “case sensitive”, literele mici sunt diferite de literele mari corespunzatoare.

Ex.:

int diferit de Int diferit de INT

Toate caracterele unui identificator sunt semnificative.

Identificatorii care incep cu 2 caractere underscore (de ex.: _ _nume ) sunt utilizati de compilator, motiv pentru care se evita definireaunui astfel de nume

Page 4: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

2. Cuvinte cheie (keywords) → nume rezervate limbajului, care

semnifica diferite comenzi, operatii, functii si nu pot fi folositi in

alt scop

asm auto bool break case catch

char class const continue default delete

do double else enum extern false

float for friend goto if inline

int long namespace new operator private

protected public register return short signed

sizeof static struct switch template this

throw true try typedef union unsigned

using virtual void volatile while

Page 5: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

3. Literale (literals) / constante → valori fixe, pe care programul /

compilatorul NU le poate modifica.

Ex.: int a = 3;

float b = 5.78;

char c = ‘v’;

char *sir = ”sir de caractere”;

a = a + 5;

NU trebuie confundate cu

notiunea de variabila constanta!

Page 6: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

A. Constante intregi →succesiune de cifre (fara punct zecimal)

- Modificarea bazei in care sunt scrise (interpretate) constanteleintregi, se face folosind prefixele: 0, 0x, 0X.

Astfel avem:

constanta zecimala (in baza 10), daca NU incepe cu 0

Ex.: 1245

constanta octala (in baza 8), daca incepe cu 0:

Ex.: 01245

constanta hexazecimala (in baza 16), daca incepecu 0x sau 0X:

Ex.: 0x1245 sau 0X1fab3

TEMA: Sa se transforme numerele din ex. dintr-o baza in cealalta

Page 7: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

A. Constante intregi →succesiune de cifre (fara punct zecimal)

- Modificarea tipului constantei intreaga corespunzator

domeniului de variatie se poate face folosind sufixurile:

- u sau U constantele devin unsigned (fara semn)

- l sau L sunt de tip long (dubla precizie)

Ex.: 123u, 32L, 432734l, 1234ul

Tipul implicit = constanta intrega cu semn, scris in baza 10,

corespunzand modul de scriere: fără prefix, (cu 0 sau 0x în faţă)

si fara sufix (u, U, l, L scris la sfarsit) al constantei.

Page 8: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

B. Constante reale (in virgula mobila) → alcatuite dintr-o parte

întreaga,punctul zecimal, o parte fractionara si optional, un

exponent întreg cu semn precedat de caracterul e sau E. Poate lipsi

partea întreaga sau partea fractionara, dar nu amândoua.

[±]ParteIntreaga.ParteFractionala𝑒𝐸

± 𝐸𝑥𝑝𝑜𝑛𝑒𝑛𝑡𝑓𝑙

//𝐹𝐿

Obs.: Implicit (fara specificator de tip) constantele reale sunt de tip double.

Specificatorii de tip: f/F pentru float

l/L pentru long double

Ex.: 1245.7

-34.9e-2f

Page 9: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

C. Constante caracter → unul sau mai multe caractere cuprinse întreghilimele simple (apostrof).

Ex.: ‘a’ ‘\n’ ‘\27’

Obs.: constanta de un singur caracter este de tipul char

constanta multi-caracter este de tipul int

Caracterele simple sunt memorate prin intermediul codului ASCII, reprezentand o valoare intreaga pe un octet

Ex.: '1' = 49

'a' = 97

'A' = 65

Page 10: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

C. Constante caracter

Constanta multi-caracter (caractere speciale, caractere de control, secvente de escape):

- caractere speciale: ‘\n’ = new line

‘\t’ = tab

‘\a’ = sunet

‘\\’ = caracterul \

‘\’’ = caracterul ‘

‘\”’ = caracterul ”

- caractere de control, specificate prin cod ASCII:

‘\nn’ = caracter cu cod ASCII in format zecimal

‘\0nnn’= caracter cu cod ASCII in format octal

‘\xnn’= caracter cu cod ASCII in format hexazecimal

Ex.: pentru ESC ‘\27’ ‘\033’ ‘\x1b’

pentru CTRL/C ‘\03’

Page 11: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

D. Constante sir de caracter → secventa de caractere cuprinsa întreghilimele (duble), este de tipul vector de caractere si la sfarsit are adaugat caracterul terminator de sir ‘\0’

Are clasa de memorare static

Poate contine caractere speciale

Ex.: “Sir de caractere \n”

Obs.: Unui pointer catre un sir de caractere care se initializeaza cu o constanta sir de caractere NU i se aloca memorie

char *nume;

- - - - - - - - - - -

nume=“Ionescu”;// Corect, fara alocare

E. Constante booleane → cuvintele cheie: true,false

Page 12: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Conventii lexicale

4. Operatori (operators) → simboluri care semnifica operatii

se vor studia mai tarziu

5. Semnele de punctuatie (punctuators) → caractere (tokens) a caror

semnificatie sintactica si semantica se stabileste in functie de

context (relativ la alte categorii lexicale ce le insotesc).

→ unele, singure sau in combinatie au semnificatie proprie

(formeaza operatori);

→ unele sunt folosite in sintaxa de preprocesare (Ex.: #)

! % ^ & * ( ) – + = { } | ~ [ ] \ ; ' : " < > ? , . / #

Obs.: Caracterele ( ),[ ],{ } trebuie se folosesc numai in pereche

Separatori (separators) → in C++ sunt 9 separatori, formand o

submultime a semnelor de punctuatie: ( )[ ]{ }, ; :

Page 13: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Variabila. Obiect

Variabila / Obiect → regiune (zona)de memorie in care este stocata o

informatie binara.

→ are asociat un tip de date, care stabileste:

- dimesiunea spatiului de memorie alocat.

- semnificatia informatiei stocate

→ are asociat un nume, prin care variabila este identificata in

spatiul aplicatiei:

→ are o durata de viata (lifetime) si un domeniu de existenta

Obiect → variabila care are ca tip de date o clasa.

Page 14: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Declaratii. Definitii.

Declaratie → instructiune prin care se anunta existenta unui nume. NU

stabileste alcatuirea entitatii numelui, motiv pentru care nu se

aloca spatiu de memorie.

Sintaxa declaratie variabila:

tip_data nume;

Obs.: Declaratia nu se refera numai la variabile, ci si la alte entitati

precum, tipuri de date, functii, etc.

Ex.: int a; // declaratie si defintie

int fct(int); // nu este necesara declararea numelui

parametrului

struct s; // declaratie tip date

class t; // declaratie tip date

s var1; // declaratie variabila cu numele var1 avand

tipul de date s

t var2; // declaratie variabila cu numele var2 avand

tipul de date t

Page 15: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Declaratii. Definitii.

Definitie → instructiune prin care se stabileste continutul (alcatuirea)

entitatii la care se refera un nume.

→ stabileste dimensiunea memoriei alocate numelui

Ex.: int fct(int a) // ESTE necesara declararea numelui parametrului

{ return a+1;

};

struct s // definitie tip date; stabileste alcatuirea lui

{ int s;

float a;

};

Obs.: - Sunt situatii in care o declaratie este si o definitie a numelui

Ex.: int a;

- Orice definitie este si o declaratie a numelui respectiv.

Page 16: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Declaratii. Definitii.

Intr-un program (in intregul proiect) trebuie sa existe o singura

definitie a unui obiect, insa pot exista oricate declaratii.

Ex.: struct s;

- - - - - - - - - - -

struct s; // corect, redeclarare

int a;

- - - - - - - - - - - -

int a; // incorect, eroare, variabila redefinita

Page 17: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Domeniu de definitie (scope)

→ zona din program in care un nume este cunoscut si poate fi folosit

• Domeniul local → numele este declarat intr-un bloc (secventa de instructiuni cuprinsa intre {}). Numele poate fi folosit incepand cu locul declararii pana la sfarsitul blocului

Ex.:

{ {

} }

• Domeniul functie → numele este declarat intr-o functie; echivalent cu domeniul local al blocului functiei

- - - - - - - - -

int a=1;

- - - - - -a++;

- - - - - - - - -

- - - - - - - - -

- - - - - - - - - - - -int b=1;

b++;

int a=2;

b=a+1;

- - - - - - - - - - - -

- - - - - - - - -

Page 18: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Domeniu de definitie (scope)

→ zona din program in care un nume este cunoscut si poate fi folosit

• Domeniul local → numele este declarat intr-un bloc (secventa de instructiuni cuprinsa intre {}). Numele poate fi folosit incepand cu locul declararii pana la sfarsitul blocului

Ex.:

{ {

} }

• Domeniul functie → numele este declarat intr-o functie; echivalent cu domeniul local al blocului functiei

- - - - - - - - -

int a=1;

- - - - - -a++;

- - - - - - - - -

- - - - - - - - -

- - - - - - - - - - - -int b=1;

b++;

int a=2;

b=a+1;

- - - - - - - - - - - -

- - - - - - - - -

Variabila a NU este definita,

NU poate fi folosita

Page 19: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Domeniu de definitie (scope)

→ zona din program in care un nume este cunoscut si poate fi folosit

• Domeniul local → numele este declarat intr-un bloc (secventa de instructiuni cuprinsa intre {}). Numele poate fi folosit incepand cu locul declararii pana la sfarsitul blocului

Ex.:

{ {

} }

• Domeniul functie → numele este declarat intr-o functie; echivalent cu domeniul local al blocului functiei

- - - - - - - - -

int a=1;

- - - - - -a++;

- - - - - - - - -

- - - - - - - - -

- - - - - - - - - - - -int b=1;

b++;

int a=2;

b=a+1;

- - - - - - - - - - - -

- - - - - - - - -

Variabila a NU este definita,

NU poate fi folosita

Domeniu de definitie pentru a

Page 20: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Domeniu de definitie

• Domeniul clasa → numele este asociat unui membru al clasei; se

foloseste in interiorul clasei.

• Domeniul fisier / global → numele este declarat in afara oricarui

bloc sau clasa;

→ are ca domeniu fisierul in care a fost declarat;

→ se poate folosi de la locul declaratiei pana la sfarsitul

fisierului;

→ NU se poate folosi in tot programul (restul fisierelor din

proiect). Pentru utilizare in alt fisier, trebuie declarat (in acel

fisier) ca extern

( Ex.: extern int a; )

Page 21: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Domeniu de vizibilitate

→ un nume este vizibil in intregul domeniu de definitie, cu exceptia

cazului in care numele este redefinit intr-un bloc inclus in

domeniul de definitie initial (domenii imbricate), caz in care

primul nume este partial ascuns.

Ex.: void fct()

{ int i=10;

{ int i=100;

cout << i << endl; // se afiseaza 100

}

cout << i << endl; // se afiseaza 10

}

Page 22: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Domeniu de vizibilitate

→ un nume cu domeniul de definitie fisier (global) poate fi accesat intr-

un domeniu local in care este ascuns prin redefinire folosind

operatorul de rezolutie ::

Ex.: int i=10;

void fct()

{ int i=100;

cout<<“val globala”<<::i<<endl; // se afiseaza 10

cout<<“val locala”<<i<<endl; // se afiseaza 100

}

→ redefinirea unui nume se poate face numai in domenii diferite, in caz

contrar se obtine eroare de redefinire

Page 23: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Durata de viata a variabilelor

(Domeniu de existenta)

O variabila este creata in momentul definirii si este distrusa cand se

paraseste domeniul de definitie.

O variabila globala se creaza in momentul definirii si exista pana la

terminarea programului

O variabila locala se creaza de fiecare data cand se executa intructiunea

de definire.

Obs.: Din acest motiv nu este indicat sa se defineasca variabile in

interiorul ciclurilor

Page 24: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Durata de viata a obiectelor

EXCEPTIE de la regulile anterioare (generale) o fac obiectele declarate

static:

→ ele isi incep existenta din momentul defintiei,

→ NU se distrug la terminarea blocului, exista pana la terminarea

programului.

→ Desi ele exista pana la terminarea aplicatiei, in intreg programul,

sunt vizibile numai in interiorul blocului in care au fost definite.

→ Se initializeaza automat (implicit) la definire cu 0

→ Instructiunea de definire (si initializare daca este explicita) se

executa numai o data, la prima parcurgere (cand se creaza obiectul).

Obs: In C++ si variabilele globale se impliciti cu 0

Page 25: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Durata de viata a obiectelor

Ex.: #include <iostream>

int a;

void fct()

{ int b=1;

static int c=2;

a++,b++,c++;

cout<<“a=”<<a<<“ b=”<<b<<“ c=”<<c<<endl;

}

int main()

{ for(int i=0;i<5;i++)

fct();

}

TEMA: ce afiseaza programul, cum se explica rezultatul?

Interesant este ca in acest punct al

programului:

a exista, e vizibil, e def.

b nu exista, nu e vizibil, nu e def.

c EXISTA, nu e vizibil, nu e def.

Page 26: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Categorii de memorare

auto → obiecte locale care se creaza (aloca memoria) automat la fiecare parcurgere a blocului. Este modul implicit de alocare a memorieiunui obiect, nu se fol. in practica.

register → pentru obiectele (variabile) folosite des se aloca memoriaintr-unul din registrii procesorului, pentru a avea timp de acces mic.Compilatoarele noi fac aceasta optimizare automat, nu se foloseste in practica.

extern → pentru obiecte globale (care se definesc intr-un singurfisier), pentru a le accesa din alte fisere trebuie declarate de tip extern.

static → obiect care exista permanent, de la definire pana la terminarea programului, este vizibil numai in interiorul functiei, bloculuisau fisierului in care a fost definit

Page 27: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Categorii de memorare

Variabila globala definita static

- se poate folosi numai in fisierul in care a fost definita

- NU poate fi declarata extern in alt fisier.

- Se blocheaza accesul din alt fisier la acest obiect.

Obiectele statice sunt obiecte globale (permanente) carora li se

restrange domeniul de vizibilitate la nivelul blocului, functiei sau

fisierului in care au fost definite

Page 28: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Tipuri de date

O variabila (numele asociat ei) are un tip de date asociat, care

determina:

- dimensiunea memoriei alocate numelui,

- domeniul de variatie,

- “decodarea” informatiei binare stocate,

- operatiile care se pot aplica variabilei.

Denumirea unui tip de date se numeste nume de tip (in particular, cand

utilizatorul defineste un nou tip de date, ii asociaza un nume nou)

Operatiile care se pot aplica unui tip de date sunt:

sizeof

new

Page 29: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Tipuri de date

Tipuri de date fundamentale (de baza)

• Tipuri intregi: char 1 oct.

int 2 oct. (4 oct.)

• Tipuri reale (in virgula mobila):

float 4 oct.

double 8 oct.

Modificatori de tip, folositi pentru ajustarea dimensiunii spatiului de

memorare, domeniului de variatie, preciziei:

signed (implicit), numai pentru tipuri intregi

unsigned numai pentru tipuri intregi

short

long

Page 30: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Tipuri de date

Tipuri de date fundamentale (de baza)

char 1 oct. -128 … 127

short int 2 oct. -32768 … 32767

int 2 oct. (4 oct.)

long int 4 oct. -2147483648 … 2147483647

long long int 8 oct.

unsigned char 1 oct. 0 … 255

unsigned int 2 oct. 0 … 65535

unsigned long 4 oct. 0 … 4294967295

float 4 oct. +/-(3.4E-38 ... 3.4E38) prec. 7 cifre

double 8 oct. +/-(1.7E-308 ... 1.7E308) prec. 15 cifre

long double 10 oct. +/-(3.4E-4932 ... 1.1E4932) p. 19 cifre

Obs.: dimensiunea alocata fiecarui tip de date fundamental depinde de

compilator, sistem de operare, etc. Este bine sa se verifice dimensiunile

tipurilor inainte de folosirea lor: ex.: sizeof(int)

Page 31: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Tipuri de date

Tipuri de date fundamentale (de baza)

Obs.:

Tipul long float este corect (sintactic), insa este echivalent

cu double

La scrierea tipurile intregi modificate , se poate omite tipul de

baza

Ex.:

long este echivalent cu long int

long long este echivalent cu long long int

Reprezentarea numerelor intregi negative se fac in complement fata de 2

Page 32: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Tipuri de date

Tipuri de date fundamentale (de baza)

•Tipul void folosit pt. pointeri, valoare returnata de functii

•Tipul bool tip date logice, valori de adevar: true, false

Se pastreaza regula (din C) de evaluare a expresiilor (valorilor)

logice:

orice valoare diferita de zero este true

numai zero are valoare logica false

Page 33: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Tipuri de date

Tipuri de date fundamentale (de baza)

Atunci cand se intalnesc variabile cu tipuri de date diferite, compilatorul

realizeaza o operatie de conversie (cast) automata a tipului

In general, regula de baza este ca tipul de date mai simplu este promovat

catre cel mai complex:

Ex.: char → int int → long int

int → float float → double

Ex.: (explicatie mecanism de conversie)

int main() int main()

{ int a=5,b=2; { int a=5;

double c; double b=2.0, c;

c = a/b; c = a/b;

cout<<c<<endl; cout<<c<<endl;

} }

Page 34: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Tipuri de dateTipuri de date fundamentale (de baza)

Constante

Cuvantul cheie const blocheaza posibilitatea de modificare a

unei variabile, aceasta devenind o variabila cu valoare constanta

Ex.: const int a2 = 54;

ATENTIE! Acest tip de constanta este o variabila, deci i se aloca

memorie, iar valoare este stocata in acea memorie.

Constanta simbolica

Se poate defini o constanta prin directiva de preprocesare:

#define nume valoare

Ex.: #define a2 54

ATENTIE! Acest tip de constanta NU ocupa loc in memorie, in esenta

este o prelucrare la nivel de text, in etapa de precompilare

! Fara ;

Page 35: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Tipuri de date

Constanta simbolica

Atentie ! Inlocuirea la nivel de text se face in tot textul codului sursa

Se pot obtin alterari la nivel de nume, cuvinte cheie, etc.

Ex.: #define a2 54

#define or 39

. . . . . . . . .

a2 = 10;

for(i=0;i<10;i++)

. . . . . . . . .

Page 36: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori

Unul dintre scopurile realizării programelor

este de a face calcule = operații

(Instrucțiunea de tip) expresia = înșiruire de operanzi și operatori

Page 37: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operanzii = entitățile asupra cărora se execută operațiile, pot fi:

constante,

constante simbolice,

variabile,

nume de funcții (apel de funcție)

Operatorii = simboluri ce determină modul de prelucrare al operanzilor

Evaluarea expresiilor se face în conformitate cu:

ordinea de priorități,

modul de asociere,

regulile de evaluare.

Operatori. Operanzi.

Page 38: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Clasificare

în raport cu numărul de operanzi asupra cărora se aplică:

• operatori unari, care se aplica unui singur operand

• operatori binari, care se aplica pentru doi operanzi

• operanzi ternari, care se aplică între trei operanzi

Operatori. Clasificare.

Page 39: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Modul de asocierea a operatorilor

Asocierea operatorilor = ordinea în care este efectuată prelucrarea

operanzilor în evaluarea expresiei.

Toți operatorii se asociază de la stânga la dreapta

cu excepția: operatorilor unari,

operatorului condițional

operatorilor de atribuire

care se asociază de la dreapta la stânga.

Operatori. Modul de asociere.

Page 40: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Ordine de priorități a operatorilor

= ordine implicită a executării operațiilor în evaluarea unei expresii

compuse, care conține mai mulți operatori,

se poate modifica prin utilizare parantezele rotunde: ( , ) .

Operatori. Ordinea de priorități.

Page 41: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori aritmetici

Operator de schimbare a semnului (minus)

Sintaxa: a = -b;

Proprietăți:

- operator unar

- evaluare dreapta-stânga = se aplică operandului din dreapta

Exemplu: int main()

{ int a, b = 5;

a = -b;

cout << a << endl;

}

Operatori. Operatori de aritmetici.

Page 42: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori aritmetici. Operatori aditivi

Operatorul de adunare + Sintaxa: a = b + c;

Operatorul de scădere - Sintaxa: a = b - c;

Proprietăți:

- operator binar

- evaluare stânga-dreapta

Exemplu: int main()

{ int a, b = 15, c = 8, d;

a = b + c;

d = b – c;

cout << a << “ ” << d << endl;

}

Operatori. Operatori de aritmetici.

Page 43: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori aritmetici. Operatori multiplicativi

Operatorul de înmulțire * Sintaxa: a = b * c;

Operatorul de împărțire / Sintaxa: a = b / c;

Operatorul de împărțire modulo % Sintaxa: a = b % c;

( = restul împărțirii lui b la c)

Proprietăți:

- operator binar

- evaluare stânga-dreapta

Exemplu: int main()

{ float a, b = 15, c = 8, d, e;

a = b * c;

d = b / c;

e = b % c;

cout << a << “ ” << d << “ ” << e << endl;

}

Operatori. Operatori de aritmetici.

Page 44: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori aritmetici. Operatori multiplicativi

Temă: Se citesc două numere de la tastatură. Să se determine dacă

primul este divizor al celui de-al doilea

Determinați daca un număr citit de la tastatură este număr par

(impar).

Operatori. Operatori de aritmetici.

Page 45: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori logici de modificare la nivel de bit (bitwise)

Sunt operatori care se aplică datelor de tip întreg

Le modifică valorile la nivel de bit (în reprezentarea lor binară)

Exemplu: valoarea întreaga 15, prelucrările se fac în binar 1111

Operatori. Operatori logici de modificare la nivel de bit (bitwise)

Page 46: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Complement față de 1 (inversarea valorii logice) ~

Sintaxa: a = ~b;

Proprietăți:

- operator unar

- evaluare dreapta-stânga = se aplică operandului din dreapta

Exemplu:

char a=7; în binar a= 00000111

b=~a; rezultă b= 11111000

se obţine: b=248

Operatori. Operatori logici de modificare la nivel de bit (bitwise)

b a = ~b;

0 1

1 0

Page 47: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

ŞI (AND) &

Sintaxa: a = b & c;

Proprietăți:

- operator binar

- evaluare stânga-dreapta

Exemplu:

char b=12,c=5,a; în binar b = 00001100

c = 00000101

a = b & c; rezultă a = 00000100

se obţine: a = 4

Operatori. Operatori logici de modificare la nivel de bit (bitwise)

b c a=b&c;

0 0 0

0 1 0

1 0 0

1 1 1

Page 48: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

SAU (OR) |

Sintaxa: a = b | c;

Proprietăți:

- operator binar

- evaluare stânga-dreapta

Exemplu:

char b=24,c=10,a; în binar b = 00011000

c = 00001010

a = b | c; rezultă a = 00011010

se obţine: a = 28

Operatori. Operatori logici de modificare la nivel de bit (bitwise)

b c a=b|c;

0 0 0

0 1 1

1 0 1

1 1 1

Page 49: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

SAU EXCLUSIV (XOR) ^

= adunare modulo 2

Sintaxa: a = b ^ c;

Proprietăți:

- operator binar

- evaluare stânga-dreapta

Exemplu:

char b=48,c=20,a; în binar b = 00110000

c = 00010100

a = b ^ c; rezultă a = 00100100

se obţine: a = 36

Operatori. Operatori logici de modificare la nivel de bit (bitwise)

b c a=b^c;

0 0 0

0 1 1

1 0 1

1 1 0

Page 50: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori de deplasare (shift)

se aplică datelor de tip întreg

acționează asupra reprezentării lor binare.

realizează deplasarea biţilor unui număr b cu un număr de c poziții

întruna din direcții (stânga sau dreapta)

Operatorul de deplasare dreapta-stânga <<

Sintaxa: a = b << c;

Operatorul de deplasare dreapta-stânga >>

Sintaxa: a = b >> c;

Proprietăți: - operator binar

- evaluare stânga-dreapta

Operatori. Operatori logici de modificare la nivel de bit (bitwise)

Page 51: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori de deplasare (shift)

Exemplu:

char b=10,c=2,a; în binar b = 00001010

a = b << c; rezultă a = 00101000

se obţine: a = 40

Exemplu:

char d=210,e=3,g; în binar d = 11010010

g = d >> e; rezultă g = 00011010

se obţine: g = 26

Operatori. Operatori logici de modificare la nivel de bit (bitwise)

Page 52: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori de deplasare (shift)

Observație:

Prin deplasare:

informația care se află în capăt, în sensul de deplasare, se pierde,

poziția din coadă, eliberată, se completează cu zero.

Exemplu:

char d=211,e=1,g; în binar d = 11010011

g = d << e; rezultă g = 10100110

Exemplu:

char d=211,e=1,g; în binar d = 11010011

g = d >> e; rezultă g = 01101001

Operatori. Operatori logici de modificare la nivel de bit (bitwise)

Page 53: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori de deplasare (shift)

Observație: Cele mai rapide operații aritmetice

Prin deplasare de k ori la stânga, daca nu se pierd biți la capăt, se

obține înmulțirea valorii cu 2k

Exemplu:

char a=3, c;

c = a << 4; // se obține c = 3x24 = 3x16 = 48

Prin deplasare de k ori la dreapta se obține împărțirea valorii cu 2k

(prin aproximare pe întregi)

Exemplu:

char a=23, c;

c = a >> 2; // se obține c = 23:22 = 23x4 = 5

Operatori. Operatori logici de modificare la nivel de bit (bitwise)

Page 54: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori de atribuire.

Operatori de atribuire

Operatorul simplu (standard) =

Sintaxa: nume_variabilă = expresie ;

• Operator binar: operand_stang = operand_drept

• Se evalueaza de la dreapta la stanga: se evalueaza mai intai

opernadul drept care apoi este transferat in operandul drept

• In urma efectuarii operatiei de atribuire se intoarce (return) ca

raspuns rezultatul transferat din drepta in stanga. Din acest motiv se

poate realiza operatie de atribuire multipla

var_1 = var_2 = . . . = var_n = expresie ;

Ex.: a = b = c = 5; echivalent cu: c=5; b=c; a=b;

a1 = cv3 = asd + 5*sd;

Page 55: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori de atribuire.

Operatori de atribuire compusi op =

Sintaxa: nume_var op = expresie ;

Echivalent cu: nume_var = nume_var op expresie ;

în care op este unul dintre operatorii binari:

• multiplicativi: * , / , %

• aditivi: + , -

• de deplasare: >> , <<

• de modificare la nivel de bit: & , | , ^

Page 56: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori de atribuire.

Operatori de atribuire compusi op =

Operator Exemplu Echivalent Rezultat

*= a*=5 a=a*5 250

/= a/=10 5

%= a%=3 2

+= a+=13 63

-= a-=7 43

>>= a>>=3 6

<<= a<<=1 100

&= a&=15 2

|= a|=12 62

^= a^=5 55

Page 57: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori relationali

Operatori relationali

• Operatorii relaţionali sunt folosiţi pentru a determina relaţia de

ordonare între doua expresii.

• Rezultatul obţinut prin aplicarea acestor operatori este tip logic

(boolean): adevărat (true) sau fals (false), conform regulii:

– valoarea 0 (zero) reprezintă valoarea logică fals

– orice valoare diferită de zero corespunde valorii logice

adevărat.

Page 58: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori relationali

Operatorii relaţionali: Sintaxa:

> mai mare expresie_1 > expresie_2

< mai mic expresie_1 < expresie_2

>= mai mare sau egal expresie_1 >= expresie_2

<= mai mic sau egal expresie_1 <= expresie_2

Exemplu:

(x+3)<5 dacă x=1 valoarea întoarsă este adevărat (true)

dacă x=4 valoarea întoarsă este fals (false)

Tema:

Sa se evalueze: x + 3 < 5

Page 59: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori de egalitate

Operatoratori de egalitate (logica)

• Sunt folosiţi pentru a determina daca doua expresii au rezultat egal

sau diferit.

• Rezultatul obţinut prin aplicarea acestor operatori este tip logic

(boolean): adevărat (true) sau fals (false).

Operatorii de egalitate: Sintaxa:

= = egalitate expresie_1 = = expresie_2

!= diferit expresie_1 != expresie_2

Ex.: (x%3)==2 dacă x=5 rezultatul este adevărat (true)

dacă x=1 rezultatul este fals (false)

Page 60: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori logici

Operatoratori logici

• Operatori pentru prelucrarea valorilor (operanzi, expresii) logice.

• Rezultatul obţinut este de tip logic (boolean): adevărat (true) sau

fals (false).

Operator logic unar: evaluare dreapta-stânga, adică se aplică

operandului din dreapta:

! negare (inversarea valorii logice) !expresie

Exemplu:

int a=5, b=7;

bool t = !(a<7);

Page 61: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori logici

Operatori logici binari, evaluare stânga-dreapta

|| SAU expresie_1 || expresie_2

Exemplu: ((x+5)<3)||(x>3)

dacă x=3 răspunsul este fals (false)

dacă x=5 răspunsul este adevărat (true)

dacă x=-4 răspunsul este adevărat (true)

Tema:

int a=5,b=7;

boole t;

t = ((a+=7)&3)||(b==8);

cout << a << b << t << endl;

Page 62: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori logici

Operatori logici binari, evaluare stânga-dreapta

&& SI expresie_1 && expresie_2

Exemplu: ((x+5)<3)&&(x<3)

dacă x=3 răspunsul este fals (false)

dacă x=-3 răspunsul este adevărat (true)

dacă x=-4 răspunsul este adevărat (true)

Tema:

int a=5,b=7;

boole t;

t = ((a^=7)&3)&&(!(b+8))||(a=9);

cout << a << b << t << endl;

Page 63: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori logici

Operatori logici binari

Operatorii logici binari: && şi ||, NU realizează evaluarea tuturor

expresiilor (operanzilor) asupra cărora acţionează,

ci evaluază operanzii în ordine apariţiei, de la stanga la dreapta, până

când se întâlneşte primul rezultat care determină rezultatul final,

expresiile care urmează NU mai sunt evaluate.

Mai exact:

• pentru && evaluarea se face până la prima expresie care are

valoare fals => răspunsul final fiind automat fals.

• pentru || evaluarea se face până la primul rezultat adevarat,

=> rezultatul final luând valoarea adevarat.

Page 64: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori logici

Operatori logici binari

Exemplu:

int a,b,c;

a=b=10;

c=(a=0)&&(b=1)&&(a=2);

cout<<a<<b<<c<<endl;

Page 65: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori de incrementare/decrementare

Operatori de incrementare/decrementare

Operatori unari, pot fi prefixati si postfixati (sufixati)

++ incrementare a++ sau ++a rezultatul final a = a+1

-- decrementare a-- sau --a rezultatul final a = a-1

Page 66: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori de incrementare/decrementare

Operatori de incrementare/decrementare

Mod de prelucrare

operaţie postfixata (sufixate):

• valoarea operandului este mai întâi folosită în prelucrare (cu

valoarea curenta),

• iar apoi este incrementată / decrementată.

Exemplu:

int a=10,x;

x=a++; /* echivalent cu:

x=a;

a=a+1; */

cout<<a<<x<<endl;

Page 67: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori de incrementare/decrementare

Operatori de incrementare/decrementare

Mod de prelucrare

operaţie prefixata:

• valoarea operandului este mai întâi incrementată / decrementată,

• iar apoi este folosită în prelucrare (cu noua valoarea).

Exemplu:

int a=10,x;

x=--a; /* echivalent cu:

a=a-1;

x=a; */

cout<<a<<x<<endl;

Page 68: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatori de incrementare/decrementare

Operatori de incrementare/decrementare

Tema 1:

int a=10;

cout<<a++<<endl;

cout<<++a<<endl;

Tema 2:

int x,a=10;

x= ++a--;

cout<<a<<endl<<x<<end;

Page 69: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatorul conditional

Operatorul conditional ?:

Operator ternar, evaluare stanga-dreapta

Sintaxa:

expresie_condiţie ? expresie_1 : expresie_2;

Echivalent:

dacă expresie_condiţie este adevărată

atunci

execută expresia_1

altfel

execută expresia_2

Page 70: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatorul conditional

Operatorul conditional ?:

Exemplu:

float a=123.56, b=-12.6;

cout<<”Modulul numarului ”<<a<<” = ”<< a>0?a:-a;

cout<<”Modulul numarului ”<<b<<” = ”<< b>0?b:-b;

Page 71: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatorul virgula

Operatorul virgula ,

Se foloseste la concatenarea a doua (sau mai multe) instructiuni, in

general acolo unde sintaxa ne obliga sa folosim numai una singura.

Exemplu: Introducerea mai multor experesii in interiorul operatorului

conditional ?:

Sintaxa:

expresie_conditie ? expresie1[, expresie2]:expresie4[, expresie5]

int a=5, b;

b = a>0?a,a++:-a,a--;

Page 72: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatorul sizeof

Operatorul sizeof

Se foloseste pentru determinarea dimensiunii unei date sau tip de data

Sintaxa:

sizeof(nume_variabila)

sizeof(nume_tip_data)

Exemplu:

int a=5;

cout<<”Dim. var. a este:” << sizeof(a) << endl;

cout <<”Dim. float:” << sizeof(float) << endl;

Page 73: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Operatorul cast

Operatorul cast

Se foloseste pentru converisa fortata (explicita) a tipului de date

corespunzator unei variabile

Sintaxa:

(nume_tip_data)nume_variabila

Exemplu:

int a=5, b=2;

float c;

c = (float)a/b;

Tema: Ce afiseaza blocul de instuctiuni?

float a=5.5,b=2.0,c;

c = (int)a/b;

cout << c << endl;

Page 74: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Reguli de conversie implicita

Reguli de conversie implicita.

A. Conversia de tip in evaluarea expresiilor

Cand o expresie conţine operanzi de tipuri diferite, se realizeaza o

operatie de cast (morificare de tip) automata (implicita), care are

ca scop aducerea operanzilor la acelasi tip.

Regula generală de conversie a tipului în evaluarea expresiilor:

tipurile mai mici (simple) sunt promovate către cele mai largi

(complexe), care dictează şi tipul rezultatul operaţiei

Observatie: In general, tipul char este transformat automat la

evaluare în tipul int. Sunt compilatoare la care si datele de tip

float sunt convertite în double

Page 75: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Reguli de conversie implicita

Reguli de conversie implicita.

A. Conversia de tip in evaluarea expresiilor

Ordinea de conversie: long double

double

float

unsigned long long

long long

unsigned long

long

unsigned int

int

Tema: Ce afiseaza blocul de instructiuni?

unsigned int a=210;

int b=-120;

int c;

c=a+b;

cout<<c<<endl;

Dim

ensi

un

e

Sen

sul

de

pro

mo

va

re

Page 76: Conventii lexicaleai.pub.ro/resources/files/PC/PC3.pdf · Conventii lexicale 4. Operatori (operators) → simboluri care semnifica operatii se vor studia mai tarziu 5. Semnele de

Operatori. Reguli de conversie implicita

Reguli de conversie implicita.

B. Conversia de tip in operatii de atribuire

În operaţiile de atribuire în care tipul operandului stânga diferă de cel

obţinut prin evaluarea expresiei membru-dreapt se face o conversie

automată a tipului din dreapta în tipul variabilei din stânga.

Dacă tipul din stânga este mai larg decât cel din dreapta, atunci în

procesul de atribuire NU se obţin erori.

În caz contrar, se obţine o pierdere de informaţie (trunchiere).