Professional Documents
Culture Documents
Sadržaj
• klasifikacija operatora
• pregled operatora
• konverzija
• niz izraza
• veličina podatka
• redosled primene operatora
• bibliotečke funkcije
3
Klasifikacija operatora
(približno opadajući nivo prioriteta)
• adresni operatori
• aritmetički operatori
• relacioni operatori
• bit-operatori
• logički operatori
• operatori dodele
• operator , (zapeta)
Unarni operatori + i -
• unarni operator – predstavlja promenu
predznaka
• unarni operator + je potvrda predznaka (nema
dejstvo)
Ako je x bilo jednako 10 tada je rezultat –x
jednak -10, a +x jednako je 10
6
Bočni efekat
• operator ima bočni efekat ako menja vrednost
operanda
• operand koji menja vrednost mora posedovati
lokaciju u memoriji; takve vrednosti nose
naziv LVALUE (LVREDNOST)
• LVALUE su promenljive, indeksirani izrazi,
selektovana polja, dereferencirani pokazivači i
kombinacije:
LVALUE: promenljiva [] . *
10
11
Primeri
x = 1; y = 5;
x--+y++ //rezultat: 6, x=0, y=6
p = 10; q = 20;
++q-p-- //rezultat: 11, p=9, q=21
r = 2; s = 4;
r+++++s //rezultat: 7, r=3, s=5
12
Relacioni operatori
• standardnih 6:
== (jednako) != (nejednako)
< (manje) <= (manje ili jednako)
> (veće) >= (veće ili jednako)
rezultat je 0 ili 1!
13
Primeri
a = 1; b = 5;
4*(a < b) //rezultat: 4
p = 10; q = 20;
p == q //rezultat: 0
14
15
Logički operatori
&& konjunkcija
|| disjunkcija
! negacija
• rezultat je 0 (u ulozi F) ili 1 (u ulozi T)
• operandi su izrazi baznog tipa; vrednost operanada:
=0 (u ulozi F) ≠0 (u ulozi T)
a = 5; b = 0; c = -3.8
a && b //rezultat je 0
b || c //rezultat je 1
!c //rezultat je 0
16
optimizacija
• računanje konjunkcije i disjunkcije je uvek
optimizovano; ako je kod konjunkcije jedan
operand =0 drugi se možda neće izračunavati
jer je rezultat sigurno 0; kod disjunkcije isto,
samo za vrednost 1; da li će optimizacija biti
primenjena ili neće zavisi od konkretnog
slučaja i programer to ne zna!
17
oprez!
• ako neki operand ima bočnih efekata treba
biti oprezan bočni efekat
19
Šiftovanje (pomeranje)
• bitovi levog operanda pomeraju se ulevo ili
udesno za broj pozicija naznačen desnim
operandom
• kod šifta ulevo << upražnjene pozicije
popunjavaju se nulama
• kod šifta udesno upražnjene pozicije
popunjavaju se nulama ako je levi operand
unsigned, odn. bitom predznaka ako je levi
operand signed
21
• neka je unsigned x = 0011 1101; tada
x << 2 daje rezultat 1111 0100
x >> 2 daje rezultat 0000 1111
• uočiti da šift ulevo za n pozicija ima isti efekat
kao množenje sa 2n, a šift udesno za n pozicija
isti efekat kao celobrojno deljenje sa 2n
22
Uslovni operator
• ternarni operator (ima 3 operanda)
• opšti oblik
izraz1 ? izraz2 : izraz3
• rezultat je jednak izraz2 ako je izraz1≠0
odnosno izraz3 ako je izraz1=0
• primer:
(a>b) ? a : b
daće za rezultat veću od vrednosti a odnosno b
23
Operatori dodele
• dodela je u C-u operator
• postoji ukupno 11 operatora dodele: tzv.
osnovni operator dodele i još 10 posebnih
• svi imaju smer grupisanja s desna u levo
• svi imaju bočni efekat
24
Osnovni operator dodele
• opšti oblik
LVALUE = izraz
• bočni efekat je dodela vrednosti izraza
objektu LVALUE
• rezultat je vrednost LVALUE (tj. levog
operanda) posle dodele
25
Primeri
x = 5 //x dobija vrednost 5; rezultat je 5
y = 2*z // y dobija vrednost 2*z i to je rezultat
a = b = c = d = 1 //a,b,c,d su 1; rezultat je 1
tzv. višestruka dodela
a = b++*(1-x)+(d=c<<3)
++s||(t=3*p)
26
28
Konverzija
• C dozvoljava gotovo potpuno mešanje tipova u
binarnim izrazima, tj. u izrazu α op β podizrazi α i β
mogu biti ma kojeg baznog tipa
• direktno izvršavanje operacija nad različitim tipovima
nije moguće zbog ograničenja računara
• u toku izvođenja operacije op tipovi operanada
moraju se izjednačiti (bez uticaja na same operande!)
• takvo izjednačavanje nosi naziv konverzija
29
Vrste konverzije
• konverzija može biti:
– implicitna (na bazi ugrađenih pravila obezbeđuje
je kompajler) ili
– eksplicitna (na zahtev programera, posredstvom
posebnih operatora); eksplicitna konverzija zove
se još i kast (od type cast)
30
Implicitna konverzija
• dva pravila: jedno za sve operatore osim dodele i drugo za
operatore dodele
• svi operatori osim dodele: koristi se tzv. tablica složenosti,
pri čemu se manje složen tip konvertuje u složeniji;
1. long double
2. double
3. float
4. (promocija) char, short i enum u int (jedan ili oba operanda)
5. long
6. int
• unsigned varijanta je složenija od signed
31
long double
32
int j; double d;
j = 3.8 //j = rezultat = 3; decimale se seku
d = 23 //d = rezultat = 23.0
j = 1e12 // j i rezultat su slucajni! 1e12 preveliko
33
eksplicitna konverzija (kast)
• primenom posebnih unarnih operatora
vrednost izraza se konvertuje u ciljni tip, bez
obzira na to kakav je tip vrednosti
• oblik svih operatora kasta je
(tip)
gde je tip ciljni tip u koji se konvertuje
• operatori se primenjuju na izraze; vrednosti
samih izraza ostaju nepromenjene!
• primeri: (int) (long double) (long) (float)
34
35
Niz izraza
• niz izraza je sredstvo za objedinjavanje više
izraza u jedan; to se postiže primenom
operatora ,
• opšti oblik:
izraz1,izraz2,...,izrazn
• izrazi se računaju s leva u desno, a vrednost
celog niza jednaka je rezultatu krajnjeg desnog
izraza (izrazn) vrednost celog niza izraza
37
38
40
41
Bibliotečke funkcije
• gotovi potprogrami (tipa sin, printf itd.) raspoređeni
su u biblioteke, prema srodnosti poslova koje
obavljaju
• imena svih standardnih funkcija pišu se isključivo
malim slovima
• pre prve upotrebe bilo koje standardne funkcije
mora se, direktivom #include naznačiti zaglavlje
biblioteke u kojoj se funkcija nalazi:
#include <zaglavlje.h>
• pored funkcija, u bibliotekama se nalaze i drugi
elementi C-a: simboličke konstante, gotovi tipovi itd.
42
zaglavlja standardnih biblioteka
• stdio.h - funkcije za ulaz-izlaz
• math.h - matematičke funkcije
• string.h - rad sa stringovima
• stdlib.h - razne funkcije, uključujući i one za
rad sa pokazivačima
• u praksi se pojavljuju još neke biblioteke, pa
uvek treba proveriti skup i sadržaj biblioteka
koje nudi konkretan C-ov sistem
43
Rezime
• klasifikacija operatora: adresni, aritmetički, relacioni,
logički, bit-operatori, dodele, uslovni, operator ,
• pregled operatora
• konverzija se vrši prilikom izračunavanja mešovitih
izraza
• niz izraza služi za grupisanje izraza u jedan
• veličina podatka nije garantovana
• redosled primene operatora za nesusedne operatore
nije unapred određen
• bibliotečke funkcije su gotovi potprogrami i deo su C-a
44