|
|
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 |
Previous: Constante | Index | Next: Intrări/Ieșiri de bază |