Operatori
Tipom podataka je između ostalog određen i skup operatora koji mogu da se koriste nad podacima određenog tipa.
Operatori se mogu klasifikovati po više kriterijuma. Najčešće se koristi klasifikacija po broju operanada i klasifikacija u odnosu na vrstu izraza u kojima se koriste.
Po broju operanada operatori mogu biti:
· Unarni
· Binarni
· Ternarni
Unarni operatori su operatori koji imaju samo jedan operand. Takav je na primer operator negacije.
Binarni operatori se primenjuju nad dva operanda i oni su najčešči. Primer binarnih operatora su operatori za sabiranje, oduzimanje, množenje itd.
Ternarni operator ima tri operanda i u programskom jeziku C# postoji samo jedan takav operator (to je operator „?:“) koji će naknadno biti opisan.
Na osnovu vrste izraza u kojima se koriste operatori mogu biti:
· Aritmetički (numerički)
· Logički
· Relacijski i
· Operatori za rad sa tekstualnim podacima
Aritmetički operatori su:
+ - sabiranje
- - oduzimanje
* - množenje
/ - deljenje
% - ostatak celobrojnog deljenja
Logički operatori su:
! – negacija
II – logičko „ili“ (OR)
&& - logičko „I“ (AND)
Relacijski operatori su:
== - ekvivalencija tj. jednakost
!= - neekvivalencija tj. različito
< - manje
> - veće
<= - manje ili jednako
>= - veće ili jednako
Tekstualni operator je oznake + i predstavlja nadovezivanje drugog operanda na prvi operand.
Operatori za rad sa bitovima su:
~ - negacija na nivou bita
& - logičko „I“ na nivou bita
I – logičko „ili“ na nivou bita
^ - eksluzivno ili na nivou bita
<< - pomeranje u levo
>> - pomeranje u desno
Pored navedenih operatora koji se najčešće koriste postoje i drugi operatori kao što su operatori dodele, oeratori za inkrementiranje, operatori za dekrementiranje, ternarni operator itd.
Osnovni operator dodele je =. U opštem slučaju operator dodele se koristi na sledeći način:
promenljiva = izraz
Najpre se izračunava izraz, a zatim se izračunata vrednost izraza dodeljuje promenljivoj pri čemu tipovi izraza i promenljive moraju da se slože, tj. tip izraza i tip promenljive moraju biti isti.
Pored osnovnog operatora dodele postoje i složeni oblici operatora dodele koji imaju opšti oblik: operator= . Gde je operator bilo koji aritmetički operator. Npr:
a+=b; je isto što i a=a+b;
Operatori inkrementiranja u oznaci ++ i dekrementiranja u oznaci – mogu biti prefiksni i postfiksni. Operator inkrementiranja povećava vrednost operanda za jedan a operator dekrementiranja smanjuje vrednost operanda za jedan i to bez obzira da li su prefiksni ili postfiksni. Razlika se uočava jedino kada su ovi operatori deo nekog složenijeg izraza. U tom slučaju se operatori inkrementiranja i dekrementiranja ako su u prefiksnom obliku izvršavaju pre računanja vrednosti izraza za razliku od slučaja kada se javljaju u postfiksnom obliku kada se izvršavaju tek nakon izračunatog izraza. Ilustrovaćemo to sledećim primerom koji predstavlja deo nekog koda:
int i = 5;
int y = 10;
int x = 0;
i++; // vrednost i se povecava za jedan tj i ima vrednost 6;
++i; // vrednost i se povećava za jedan tj i ima vrednost 7;
i--; // vrednost i se smanjuje za jedan tj i ima vrednost 6;
--i; // vrednost i se smanjuje za jedan tj i ima vrednost 5;
x = y + ++i; // x=16 jer se vrednost i poveca za jedan pa se sabere sa y (10+6)
x = y + i++; // x=15 jer se vrednost i sabere sa y i dodeli x a zatim se i poveca za jedan (10+5, i=6)
x = y + --i; // x=14 jer se vrednost i smanji za jedan pa se sabere sa y (10+4)
x = y + i--; // x=15 jer se vrednost i sabere sa y i dodeli x a zatim se i smanji za jedan (10+5, i=4)
Prioritet operatora
Ako se u jednom izrazu pojavi više operatora postavlja se pitanje kojim redosledom će oni biti primenjivani tj. izvšavani. Svaki operator ima svoj prioritet. Redosled primene operatora zavisi od prioriteta operatora koji se sreću u jednom izrazu.
Ako imamo više operatora istog prioriteta onda se u nekim slučajevima oni primenjuju sleva u desno tj. onako kako se pojavljuju u izrazu (npr. operatori sabiranja, oduzimanja i sl.) dok se u ostalim slučajevima operatori primenjuju s desna u levo (npr. operator dodele).
Može se zaključiti da pored poznavanja načina funkcionisanja operatora treba znati i prioritet operatora i redosled izvršavanja ako se javi više njih uzastopno.
Ako eksplicitno želimo odgovarajući redosled izvršavanja operatora onda koristimo zagrade. U opštem slučaju se najpre primenjuju oni operatori koji se nalaze u zagradama. Ako imamo slučaj ugnježdenih zagrada onda se najpre primenjuju najdublje zagrade.
Napomena: Ako niste sigurni u prioritet operatora koristite zagrade. Na taj način će redosled izvršavanja operatora biti onakav kako želite a vreme izvršavanja neće biti promenjeno.
Svi operatori imaju svoj prioritet. Prioritet ovih kategorija je sledeći (od najvišeg ka najnižem):
· Osnovni operatori (pristup polju, poziv metode, pristup indeksu, postinkrementiranje, postdekrementiranje, new, typeof, sizeof)
· Unarni operatori (predekrementiranje, preinkrementiranje)
· Aritmetički (množenje, deljenje, ostatak pri deljenju)
· Sabiranje i oduzimanje
· Pomeranje na nivou bita (pomeranje u levo i pomeranje u desno)
· Relacioni operatori
· Jednakost (jednako i različito)
· I na nivou bita
· Ekskluzivno ILI na nivou bita
· ILI na nivou bita
· Logičko I
· Logičko ILI
· Ternarni operator
· Operatori dodeljivanja
Primer:
15%4+5 (Prvo se izvršava 15%4 što je 3 jer je operacija % većeg prioriteta od sabiranja, pa se zatim vrši sabiranje sa 5. Konačan rezultat je 8)
15/5%3/2 (Prvo se izvršava 15/5 što je 3, zatim 3%3 što je 0 i konačno 0/2 što kao rezultat daje 0)