Limbajele de programare au operanzi și operatori cu care construiesc expresii mai complexe sau mai puțin complexe. Există o singură regulă de evaluare a expresiilor, indiferent care sunt acestea și această regulă vizează:
- prioritatea operatorilor;
- sensul de parcurgere în procesul de evaluare.
Pentru limbajul C există tabelul:
- prioritatea operatorilor;
- sensul de parcurgere în procesul de evaluare.
Pentru limbajul C există tabelul:
Prioritatea | Operator | Descrierea | Asociativitatea |
---|---|---|---|
1 | ++ -- | Post incrementare, respectiv decrementare | Stânga la dreapta |
() | Apel funcție | ||
[] | Definire în masiv | ||
. | Referire membru în articol | ||
-> | accesare pointeri în structuri | ||
(type){list} | Compunere literali | ||
2 | ++ -- | Pre Incrementare și pre decrementare | Dreapta la stânga |
+ - | Operatori unari | ||
! ~ | negarea logică NOT și complement pe biți NOT | ||
(type) | Tipul | ||
* | Referirea lui | ||
& | Adrea lui | ||
sizeof | Lungimea lui | ||
_Alignof | Aliniere impusă | ||
3 | * / % | Înmulțire, împărțire și împărțire cu rest | Stânga la dreapta |
4 | + - | Adunare și scădere | |
5 | << >> | Deplasare pe biți | |
6 | < <= | Operatorul relațional < și ≤ | |
> >= | Operatorul relațional > și ≥ | ||
7 | == != | Operatorul relațional = și ≠ | |
8 | & | Operatorul și pe bițiAND | |
9 | ^ | Operatorul logic sau exclusiv XOR (exclusive or) | |
10 | | | Operatorul logic sau iclusiv OR | |
11 | && | Operatorul logic AND | |
12 | || | Operatorul logic OR | |
13 | ?: | Operatorul ternar | Dreapta la stânga |
14 | = | Simple assignment | |
+= -= | Assignment by sum and difference | ||
*= /= %= | Atribuire cu operații aritmetice | ||
<<= >>= | Atribuirea cu deplasare biți spre stânga, dreapta | ||
&= ^= |= | Atribuirea cu operații pe biți AND, XOR, and OR | ||
15 | , | Virgula | Stânga la dreapta |
Expresiile din parantezele rotunde se evaluează primele.
Expresia *alfa++ se evaluează *(alfa++) pentru că postincrementarea are prioritatea 1, iar operatorul de referire are prioritatea 2.
Expresia a=3, b=5, c=7;
se evaluează de la stânga spre dreapta căci operatorul virgulă așa cere. Se evaluează mai întâi atribuirea a=3, apoi se inițializează b și la urmă se evaluează expresia c=7.
Expresia:
e = a < d ? a++ : a = d
se evaluează astfel:
e = ( ((a < d) ? (a++) : a) = d )
Operatorul = are prioritatea 14 și presupune evaluare de la stânga la dreapta.
Operatorul < are prioritatea 6.
Operatorul de postincrementare ++ are prioritatea 1.
Operatorul ?: are prioritatea 13.
Se evaluează expresia a<d.
Dacă rezultatul evaluării este adevărat are loc postincrementarea și apoi e=a.
Dacă rezultatul evaluării nu este adevărat are loc atribuirea e=d.
Expresia *alfa++ se evaluează *(alfa++) pentru că postincrementarea are prioritatea 1, iar operatorul de referire are prioritatea 2.
Expresia a=3, b=5, c=7;
se evaluează de la stânga spre dreapta căci operatorul virgulă așa cere. Se evaluează mai întâi atribuirea a=3, apoi se inițializează b și la urmă se evaluează expresia c=7.
Expresia:
e = a < d ? a++ : a = d
se evaluează astfel:
e = ( ((a < d) ? (a++) : a) = d )
Operatorul = are prioritatea 14 și presupune evaluare de la stânga la dreapta.
Operatorul < are prioritatea 6.
Operatorul de postincrementare ++ are prioritatea 1.
Operatorul ?: are prioritatea 13.
Se evaluează expresia a<d.
Dacă rezultatul evaluării este adevărat are loc postincrementarea și apoi e=a.
Dacă rezultatul evaluării nu este adevărat are loc atribuirea e=d.
În lucru acum
(13 noiembrie 2017)
No comments:
Post a Comment