U ovom ćete tutorijalu uz primjere naučiti o prednosti i asocijativnosti operatora.
Prednost operatora
Prioritet operatora određuje koji se operator izvršava prvi ako se u izrazu nalazi više od jednog operatora.
Razmotrimo primjer:
int x = 5 - 17* 6;
U C je prednost *
od -
i =
. Dakle, 17 * 6
prvo se ocjenjuje. Tada se izraz koji -
se uključuje procjenjuje kao prioritet od -
veći od izraza =
.
Evo tablice prioriteta operatora od višeg prema nižem. O svojstvu asocijativnosti raspravljat će se uskoro.
Tablica prvenstva operatora i asocijativnosti
Operater | Značenje operatora | Asocijativnost |
---|---|---|
() () -> . | Funkcionalni poziv Referenca elementa niza Neizravni odabir člana Izravni odabir člana | S lijeva nadesno |
! ~ + - ++ - & * veličina (vrsta) | Logička negacija Bitni dodatak (1) nadogradnje Unary plus Unary minus Increment Decrement Dereference (Address) Referenca pokazivača Vraća veličinu objekta Typecast (pretvorba) | S desna na lijevo |
* / % | Množi podijeli ostatak | S lijeva nadesno |
+ - | Binarni plus (zbrajanje) Binarni minus (oduzimanje) | S lijeva nadesno |
<< >> | Lijevi pomak Desni pomak | S lijeva nadesno |
< <= > > = | Manje od manje od ili jednako Veće od veće ili jednako | S lijeva nadesno |
== ! = | Jednako s Nije jednako sa | S lijeva nadesno |
& | Bitno I | S lijeva nadesno |
^ | Bitno ekskluzivno ILI | S lijeva nadesno |
| | Bitno ILI | S lijeva nadesno |
&& | Logično I | S lijeva nadesno |
|| | Logično ILI | S lijeva nadesno |
?: | Uvjetni operater | S desna na lijevo |
= * = / = % = + = - = & = = | = << = >> = | Jednostavno dodjeljivanje Dodijeli proizvod Dodijeli količnik Dodijeli ostatak Dodijeli zbroj Dodijeli razliku Dodijeli bit i I dodijeli bit XOR Dodijeli bit ili ILI Dodijeli lijevi pomak Dodijeli desni pomak | S desna na lijevo |
, | Razdjelnik izraza | S lijeva nadesno |
Udruživanje operatora
Asocijativnost operatora određuje smjer u kojem se ocjenjuje izraz. Na primjer,
b = a;
Ovdje je vrijednost a dodijeljena b, a ne obrnuto. To je zato što je asocijativnost =
operatora zdesna nalijevo.
Također, ako su prisutna dva operatora istog prioriteta (prioriteta), asocijativnost određuje smjer u kojem se izvršavaju.
Razmotrimo primjer:
1 == 2! = 3
Evo, operatori ==
i !=
imaju istu prednost. A, njihova je asocijativnost slijeva udesno. Dakle, 1 == 2
prvo se izvršava.
Gornji izraz ekvivalentan je:
(1 == 2)! = 3
Napomena: Ako izraz ima više operatora, možete koristiti zagrade ()
kako biste kôd učinili čitljivijim.