Curs C++| Sectiunea 3 – Numere si operatori
In sectiunea precedenta am discutat despre tipuri de date si am invatat despre tipul intreg int. Acum este timpul sa trecem la al 2 lea tip si anume, numarul cu zecimale (floating-point number).
❗ Ce trebuie mentionat la scrierea lui este ca nu folosim virgula “,” ci punct “.” . Virgula in C++ fiind folosita in alte scopuri.
Tipul Float
Putem spune ca tranformarea unui numar in float apare odata cu virgula.
Desi in ambele cazuri x = 10, in al doilea apare virgula asa ca x va deveni de tip float, putand stoca si zecimale.
Declararea unei variabile de tip float este identica cu cea de tip int, prin adaugarea keyword-ului corespunzator in fata numelui. Acum ca am stabilit acest lucru, sa discutam ce s-ar intampla daca vrem sa facem o conversie a unei valori din int in float si invers.
Int <-> Float
❗ Putem mereu sa facem aceste conversii intre tipuri de date dar acest lucru poate duce la pierderea acuratetii (loss of accuracy).
In Cazul 1, cand atribuim valoarea stocata in x lui y, acesta va avea valoarea 10.0 deoarece se face o conversie automata la tipul de date corespunzator. Aceasta transformare afecteaza reprezentarea interna a valorilor, calculatorul folosind metode diferite pentru stocarea tipurilor float fata de int.
Acum sa aruncam o privire pe Cazul 2. Dupa cum ne-am astepta, aceasta conversie va duce la pierderea acuratetii. Astfel ca valoarea finala stocata in x va fi 10. Variabilele intregi au o capacitate limitate de stocare.
Spre exemplu daca ne dorim sa stocam un numar foarte mare, pe 32 de biti intr-o variabila de tip int, nu este foarte clar ce se va intampla. Cu siguranta va exista o pierdere de acuratete dar rezultatul nu poate fi prezis. Pe unele sisteme, poate nu va exista nici o problema, in schimb, pe altele posibil sa apara erori sau valoarea asignata sa fie una aleatoare.
❗ Acest fenomen poarta numele in engleza de implementation dependent issue. Cum am spune, ce functioneaza local la noi, poate sa nu se comporte la fel pe alte calculatoare, in functie de librarii, compilator, sistem de operare etc.
Operatori
💡 Un operator este un simbol al limbajului de programare, acesta operand pe valorile variabilelor noastre. Un operator pe care l-am mai folosit deja este operatorul egal (assingment operator).
Mai departe sa luam la rand cei mai folositi si comuni operatori. Acestia fiind chiar operatorii comuni din matematica.
❗ In general, operatorii sunt cei clasici si rezultatele sunt cele asteptate. Ce trebuie mentionat este impartirea la 0. Prima impartire, la 0, este interzisa si va provoca o eroare la compilare (compiletime error) si o eroare la rulare (runtime error). In schimb, a doua, la 0.0 (de tip float) , va compila si rula fara probleme dar va returna inf, adica infinit. Acest rezultat mai poate fi numit si exceptie.
Ultimul operator este cel de rest (remainder). Este mai special deoarece nu avem o corespondenta a lui in matematica. Reprezentarea grafica o facem prin caracterul procent “%“. Mai pote fi numi si operator binar (modulo operation) si trebuie tinut cont de faptul ca ambele argumente nu pot fi de tip float.
In exemplul de mai sus c ia valoarea 1 deoarece restul impartirii lui 10 la 3 este chiar 1.
❓ Mai trebuie mentionat ca nu putem folosi acest operator cu argumentul din dreapta fiind 0. De ce am putea spune? Pentru ca vom intra pe acelasi caz de mai sus in care impartim la 0.
Prioritati
Dupa cum ne-am astepta, in cazul in care vom folosi mai multi operatori in aceeasi expresie, acestia se vor rezolva in ordinea prioritaii, la fel ca in matematica. In C++, acest fenomen este definit ca o ierarhie de prioritati. Sunt definie prioritatile pentru fiecare operator si sunt realizate operatiile in ordinea acestora.
De asemenea, ordinea este de la stanga la dreapta. Acest fenomen poarta numele de binding (left-sided binding).
Folosind doar operatorii invatati pana acum, prioritatea ar arata astfel:
| + – | unary |
| * / % | |
| + – | binary |
Spre exemplu, in urmatoarea linie de cod deoarece avem operatori cu aceeasi prioritatea, se va aplica fenomenul anterior de binding si se vor rezolva de la stanga la dreapta.
O lista completa a operatorilor din C++ si prioritatea acestora o gasiti aici.
Bineinteles, putem folosi oricand paranteze, ca si in matematica, ce vor schimba ordinea rezolvarii. Expresiile din paranteze fiind mereu calculate primele.
Incrementare & Decrementare
💡 Operatiunea de incrementare sau decrementare presupune cresterea sau scaderea unei variabile cu 1. Acest lucru il putem face prin cei 2 operatori “+“, “–” invatati anterior (cei din matematica) dar mai exista si alta varianta.
Dupa cum ne-am putea imagina, operatorii sunt definiti astfel:
- ++ operator de incrementare (increment operator)
- – – operator de decrementare (decrement operator)
Desi in exemplu am folosit operatorii dupa variabila, ii putem pune si inainte. Rezultatul final este acelasi, totusi exista o diferenta semnificativa.
Sa mai discutam o data.
❗ In Cazul 1 se incrementeaza/decrementeaza cu 1 variabila si se returneaza variabila modificata. In Cazul 2 se returneaza variabila initiala (nemodificata) si apoi se face incrementarea/decrementarea variabilei cu 1.
Astfel, putem defini operatorii de post si pre incrementare/decrementare.
- pre – variabila este modificata mai intai si apoi este folosita
- post – variabila este folosita si apoi este modificata
Pre/Post Incrementare/Decrementare
Sa analizam cateva exemple.
Pasii sunt urmatorii:
- Variabilei a i se atribuie valoarea 10
- Variabila b primeste valoarea 10 (valoarea initiala a lui a)
- Variabila a este incrementat cu 1 si devine 11
Pasii in acest caz sunt astfel:
- Variabilei a i se atribuie valoarea 10
- Variabila a este incrementata cu 1 si devine 11
- Variabila b primeste noua valoare a lui a si devine 11
❗ Ultimul lucru pe care trebuie sa-l mentionam are legatura cu prioritatea, prioritatea operatorilor de care am discutat anterior. Acesti operatori au prioritate mai mare decat restul operatorilor. Astfel ca, mai intai sunt analizati ei si apoi se fac restul calculelor, intr-o expresie.
Operatori Shortcut
Ultimii operatori de care vorbim in aceasta sectiune sunt cei pentru a prescurta modul de scriere. Voi prezenta cateva exemple si se va inelege de la sine care este rolul lor.
Iar sintaxa generala ar fi de forma urmatoare:
Aici se termina si aceasta sectiune 🙂 . Acestia sunt operatorii cei mai intalniti si des folositi. Pentru mai multe detalii, ma puteti gasi oricand folosi informatiile de aici.
➡ Sectiunea anterioara:Curs C++ | Sectiunea 2 – Valori intregi, variable intregi si comentarii
➡ Sectiunea urmatoare:Curs C++ | Sectiunea 4 – Tipul Char

