|
|
5 variabilei x. Operația de atribuire are loc întotdeauna de la dreapta la stânga, niciodată în sens invers: |
|
x valoarea conținută în variabila y. Valoarea lui x la momentul execuției acestei instrucțiuni este pierdută și înlocuită cu valoarea lui y.x valoarea lui y, la momentul operației de atribuire. De aceea, dacă y se schimbă mai târziu, aceasta nu va afecta valaorea luată de x. |
|
a:4 b:7 |
a și b (4, respectiv 7). Observați că a nu a fost afectat de schimbarea finală a lui b, chiar dacă am avut a = b mai înainte. |
|
y i se atribuie rezultatul sumei dintre 2 și valoarea altei expresii de atribuire (care are, la rândul ei, valoarea 5). Este echivalentă cu: |
|
y. |
|
x, y și z; întotdeauna de la dreapta la stânga.| Operator | Descriere |
|---|---|
+ | Adunare |
- | Scădere |
* | Înmulțire |
/ | Împărțire |
% | Modulo |
%), determină restul împărțirii a două valori. De exemplu: |
|
x conține valoarea 2, deoarece împărțind pe 11 la 3 obținem câtul 3 și restul 2.| Expresie | Echivalentă cu... |
|---|---|
y += x; | y = y + x; |
x -= 5; | x = x - 5; |
x /= y; | x = x / y; |
pret *= cantitate + 1; | pret = pret * (cantitate+1); |
|
|
5 |
++) și operatorul de decrementare (--) crește, respectiv descrește cu o unitate valoarea memorată în variabilă. Ele sunt echivalente cu +=1, respectiv -=1. Deci: |
|
x.++x) fie după el (x++). Cu toate că în expresii simple precum x++ sau ++x, au exact același înțeles, în alte expresii în care rezultatul incrementării sau decrementării este evaluat, poate fi o mare diferență între sensurile lor: în cazul prefixării operatorului de incrementare a valorii (++x), expresia se evaluează cu valoarea finală a lui x, adică acea valoare care a fost deja majorată. Pe de altă parte, în cazul postfixării (x++), valoarea este majorată,dar expresia se evaluează cu valaorea pe care o avea x înainte de incrementare. Să observăm diferența:| Exemplul 1 | Exemplul 2 |
|---|---|
x = 3; |
x = 3; |
y este valoarea lui x după ce a fost majorată. În timp ce în Exemplul 2, are valoarea lui x înainte ca ea să fi fost majorată.| Operator | Descriere |
|---|---|
== | Egal cu |
!= | Diferit de |
< | Mai mic decât |
> | Mai mare decât |
<= | Mai mic decât sau egal cu |
>= | Mai mare decât sau egal cu |
|
|
a=2, b=3 și c=6; atunci: |
|
=, cu un simbol egal) nu este același cu operatorul de egalitate folosit pentru comparație(operatorul ==, cu două semne egal); primul (=) atribuie valoarea din partea dreaptă variabilei din stânga, în timp ce celălalt (==) compară valorile din cele două părți ale operatorului de egalitate. De aceea, în ultima expresie ((b=2) == a), mai întâi atribuim valoarea 2 lui b și apoi o comparăm cu a (care conține tot valoarea 2), deci avem true.! este implementarea în C++ a operației boolene NOT. Are doar un operand, la dreapta sa, și îl neagă producând false dacă operandul este true, respectiv true dacă operandul este false. În principiu, el returnează valoarea booleană opusă valorii pe care o are operandul. De exemplu: |
|
&& și || se folosesc la evaluarea a două expresii pentru a obține un singur rezultat de relație. Operatorul && corespunde operației logice boolene AND, care va avea rezultatul true dacă ambii operanzi au valoarea true și false în celelalte situații. Următorul tabel ne arată rezultatul operatorului && după evaluarea expresiei a&&b:| Operatorul && (și) | ||
|---|---|---|
a | b | a && b |
true | true | true |
true | false | false |
false | true | false |
false | false | false |
|| corespunde operației logice boolene OR, care are valaorea true dacă oricare dintre operanzii săi are valoarea true, deci va fi falsă numai când ambii operanzi sunt falși. Iată posibilele rezultate ale lui a||b:| Operatorul || (sau) | ||
|---|---|---|
a | b | a || b |
true | true | true |
true | false | true |
false | true | true |
false | false | false |
|
|
(5==5)||(3>6)), C++ evaluează mai întâi dacă egalitatea 5==5 este true și , în caz afirmativ, nu va mai verifica dacă și inegalitatea 3>6 este true sau nu. Acest mecanism este cunoscut ca evaluare scurt-circuit și lucrează, pentru acești operatori ca mai jos:| Operator | Scurt-circuit |
|---|---|
&& | dacă expresia din partea stângă este false, rezultatul combinat este false (expresia din partea dreaptă nu va mai fi evaluată). |
|| | dacă expresia din partea stângă este true, rezultatul expresiei combinate este true (expresia din partea dreaptă nu va mai fi evaluată). |
|
|
i cu o unitate, dar numai în cazul în care condiția din stânga semnului && are valaorea true, deoarece altfel condiția din partea dreaptă (++i<n) nu va fi evaluată (deci incrementarea nu are loc).true, respectiv o altă valoare atunci când expresia are valoarea de adevăr false. Sintaxa ei este:conditie ? rezultat_1 : rezultat_2 conditie are valoarea true, întreaga expresie se evaluează cu rezultat_1, iar altfel se evaluează cu rezultat_2. |
|
|
|
7 |
a este 2, b este 7, așa încât expresia care trebuie evaluată (a>b) nu are valoarea true, deci prima valoare precizată după semnul de întrebare este ignorată în favoarea celei de-a doua valori (cea de după două puncte) adică b (care este 7).,) este folosit pentru a separa două sau mai multe expresii succesive. Când setul de expresii trebuie evaluat la o valoare, numai expresia cea mai din dreapta se va lua în considerare. |
|
b, apoi asignează b+2 variabilei a. Așa încât, la sfârșit, variabila a ar putea conține valoarea 5 în timp ce variabila b ar conține valoarea 3.| Operator | Echivalent asm | Descriere |
|---|---|---|
& | AND | AND pe biți |
| | OR | OR inclusiv pe biți |
^ | XOR | OR exclusiv pe biți |
~ | NOT | Complement unar (complementarea pe biți) |
<< | SHL | Shiftare spre stânga pe biți |
>> | SHR | Shiftare spre dreapta (pe biți) |
|
|
3.14 la o valoare întreagă (3); restul se pierde. Aici, operatorul de conversie este (int). Altă modalitate de a face exact același lucru în C++ este folosirea notației funcționale: după cuvântul cheie corespunzător noului tip, urmează expresia de convertit cuprinsă între paranteze: |
|
|
|
x i se asignează valoarea 1, deoarece tipul de dată char are dimensiunea de un byte.sizeof este determinată în timpul compilării, deci ea este determinată întotdeauna înainte de execuția programului. |
|
x, deoarece operatorul % are o precedență mai mare față de operatorul + și este evaluat întotdeauna înainte. Uneori părți ale unor expresii pot fi cuprinse între paranteze pentru a modifica ordinea dată de precedență sau pentru a face mai explicit efectul dorit. Să observăm diferența: |
|
| Grad | grup de precedență | Operator | Descriere | Grupare |
|---|---|---|---|---|
| 1 | Domeniu | :: | Calificator de domeniu | De la stânga la dreapta |
| 2 | Postfixat (unar) | ++ -- | Incrementare / decrementare postfixată | De la stânga la dreapta |
() | Forme funcționale | |||
[] | subscript | |||
. -> | Accesare membru | |||
| 3 | Prefixat (unar) | ++ -- | Incrementare / decrementare prefixată | De la dreapta la stânga |
~ ! | NOT pe biți / NOT logic | |||
+ - | Unar prefixat | |||
& * | Referențiere / Dereferențiere | |||
new delete | Alocare / Dealocare | |||
sizeof | parameter pack | |||
(type) | Conversie de tip în stilul C | |||
| 4 | Pointer la membru | .* ->* | Pointer de acces | De la stânga la dreapta |
| 5 | Aritmetic: scaling | * / % | înmulțire, împărțire, modulo | De la stânga la dreapta |
| 6 | Aritmetic: adunare | + - | adunare, scădere | De la stânga la dreapta |
| 7 | Deplasare pe biți | << >> | deplasare stânga, deplasare dreapta | De la stânga la dreapta |
| 8 | Relațional | < > <= >= | Operatori de comparație | De la stânga la dreapta |
| 9 | Egalitate | == != | egalitate / inegalitate | De la stânga la dreapta |
| 10 | Și | & | AND pe biți | De la stânga la dreapta |
| 11 | OR exclusiv | ^ | XOR pe biți | De la stânga la dreapta |
| 12 | OR inclusiv | | | OR pe biți | De la stânga la dreapta |
| 13 | Conjuncție | && | AND logic | De la stânga la dreapta |
| 14 | Disjuncție | || | OR logic | De la stânga la dreapta |
| 15 | Expresii la nivel de atribuire | = *= /= %= += -= | Atribuire / Atribuire compusă | De la dreapta la stânga |
?: | Operator condițional | |||
| 16 | Secvență | , | Separator virgulă | De la stânga la dreapta |
Constante | Index | Intrări/Ieșiri de bază |