You are on page 1of 29

Osnove programiranja

Zagreb, 2006.

Uvod u C-programiranje
osnovni tipovi podataka

Pripremio: Dr. sc. Miroslav Slamić, Prof. v. šk.

ZAGREB, 2006.

Osnovni tipovi podataka

ƒ Osnovni tipovi podataka


char - znakovni tip ili mali cijeli broj
int - cjelobrojni tip
float - realni tip
double - realni tip u dvostrukoj preciznosti

ƒ Prefiksi ili kvalifikatori


short - smanuje raspon cjelobrojnih vrijednosti koje varijabla
mož
može sadrž
sadržavati
long - poveć
povećava raspon cjelobrojnihvrijednosti koje varijabla
mož
može sadrž
sadržavati
signed - dozvoljava pridruž
pridruživanje pozitivnih i negativnih vrijednosti
unsigned - dozvoljava pridruž
pridruživanje samo pozitivnih vrijednosti

1
Treba voditi rač
računa kod deklaracije tipa
podataka!
ƒ Primjer u programskom jeziku C
Brojanje
void main () {
short int i;
i = 0;
while (i < 100000) {
i = i + 1;
}
printf ("Gotovo!");
}
ƒ Ovaj program neć
neće moć
moći brojiti do 100000 jer je short int i
ogranič
ograničen na 32767.

Binarni brojevi
ƒ Kod binarnih brojeva (baza 2), znamenke
imaju samo dvije vrijednosti:
y 0 or 1
ƒ Jedan bit čuva dvije različ
različite vrijednosti
ƒ Binarni sustav je prirodni nač
način za
pohranu brojeva u predlož
predložak bitova
y Binarni sustav je manje kompaktan za prikaz,
ali je njegova jednostavnost praktič
praktičnija za
elektronič
elektroničku manipulaciju brojeva.
ƒ “bit”
bit” znač
znači “binary digit
digit””

Vrijednosti pozicija kod brojevnih


sustava
ƒ DEKADSKI BROJ “256”
256”
Pozicijska
vrijednost baza - konstantna
znamenke
Faktor
skaliranja 102 101 100
Eksponent
× + × + × Uveć
Uvećava se
zdesna
2 5 6
od 0 na
lijevo
Znamenke (množ
množitelji)
itelji)
područ
područje 0 to 9 (tj.
tj. 0 do baza-
baza-1)

2
Vrijednosti pozicija kod brojevnih
sustava
ƒ Za binarni broj “10010”
010” (baza 2) to
izgleda ovako
Baza je 2

24 23 22 21 20
× + × + × + × + ×
1 0 0 1 0

Za bazu 2 znamenke
su 0 ili 1

Konverzija u binarni sustav


ƒ Sve potencije broja 2 su parne
y 21 = 2, 28 = 256, 215 = 32768, ...
y 20 = 1 osim nulte
ƒ Samo zadnji bit određuje da li je broj
paran/neparan
y Ako je broj neparan zadnja znamenka je 1
y Ako je broj paran zadnja znamenka je 0
ƒ Za razvoj konač
konačne binarne znamenke
dijelimo sa 2
y Ostatak dijeljenja (0 ili 1) je binarni znak
y Kvocijenti se koriste za ponavljanje procedure
• 21/2 = 1, 28/2 = 128, 215/2 = 16384, ...

Konverzija u binarni sustav


prema gore
12610
÷2= 63 ost.
ost. 0 Rezultat je

÷2= 31 ost.
ost. 1
÷2= 15 ost.
ost. 1
÷2= 7 ost.
ost. 1
÷2= 3 ost.
ost. 1
÷2= 1 ost.
ost. 1
÷2= 0 ost.
ost. 1
111
11111102
ZAUSTAVI kada ovaj rezultat Čitaj
postane nula odozdo

3
Konverzija u binarni sustav
ƒ Drugim riječ
riječima . . . Krajnji desni bit zove se
the least significant bit
(LSB)

12610 = 11011
11011102

Krajnji lijevi bit zove


se most significant
bit (MSB)

Rekapitulacija - konverzije u
binarni sustav
ƒ Započ
Započinjemo s dekadskim brojem
kojeg pretvaramo
ƒ Ponavljamo:
Ponavljamo:
y Podijelimo broj s 2 i ostatak 0 ili 1
zapiš
zapišemo
y Ponavljamo dok broj ne postane
jednak nuli
ƒ Binarni ekvivalent je kompletan
y Čitamo znamenke u obrnutom
redoslijedu od njihovog nastanka tako
da je MSB prvi s lijeva

Neke potencije baze 2

y Korisno je zapamtiti barem do 212

20 = 1 212 = 4,096 220 = je oko


21 = 2 213 = 8,192 1,000,000
210 = je oko
1,000 (“
(“k”) 22 = 4 214 = 16,384 (“M”)
23 = 8 215 = 32,768
24 = 16 216 = 65,536
25 = 32
26 = 64 220 = 1, 048, 576
27 = 128
28 = 256 224 = 16, 777 ,216
29 = 512
230 = 1, 073 ,741, 824
210 = 1,024
231 = 2, 147, 483 ,648
211 = 2,048
232 = 4 ,294 ,967 ,296

4
Pretvaranje binarnog broja u
dekadski

27 26 25 24 23 22 21 20
(128) (64) (32)
(32) (16) (8) (4) (2) (1) Vrijednost
pozicije

0 1 1 1 1 0 1 1
Zbrajanje
vrijednosti pozicija za
8 9 8 9 9 8 9 8 koje je binarna
vrijednost 1

64+32+
32+16+ 8 + 2 +1 = 123

Pretvaranje binarnog broja u


dekadski
ƒ Ili, drugim riječ
riječima . . .

011 110112 = 12310


01111011

Indeks označ
označava
bazu

Pozicijske vrijednosti za različ


različite brojevne
sustave
Manje baze : manje
BAZA VRIJEDNOST
kompaktno, jednostavniji
2 100101111110
opseg znamenki,
3 10100000
jednostavnija matematika
4 211332
5 34210
6 15130
Prikaz dekadskog broja 2430 7 10041
u bazama od 2 do 16 8 4576
9 3300
10 2430
11 190A
12 14A6
Već
Veće baze:
baze: kompaktniji 13 114C
prikaz,
prikaz, širi opseg 14 C58
znamenki,
znamenki, težteža 15 AC0
matematika 16 97E

5
Pozicijske vrijednosti za različ
različite brojevne
sustave
BAZA VRIJEDNOST
2 100101111110
3 10100000 Znamenke s vrijednostima
4 211332 već
većim od 9 označ
označavaju se
5 34210 slovima
6 15130
7 10041
A = (10)
8 4576 B = (11)
9 3300 C = (12)
10 2430 D = (13)
11 190A
12 14A6
E = (14)
13 114C F = (15)
14 C58 Itd.
Itd.
15 AC0
16 97E

Pozicijske vrijednosti za različ


različite brojevne
sustave

BAZA VRIJEDNOST
binarni 2 100101111110
3 10100000
4 211332
5 34210
6 15130
Uobič
Uobičajene baze 7 10041
(brojevni oktalni 8 4576
9 3300
sustava) u dekadski 10 2430
rač
računanju 11 190A
12 14A6
13 114C
14 C58
15 AC0
heksadekadski (“hex”
hex”) 16 97E

Rekapitulacija pretvorbe binarnog


broja u dekadski
ƒ Postavi rezultat na nulu
ƒ Za svaku znamenku (bit):
y Pridruž
Pridruži joj dekadsku vrijednost pozicije
• Iz skupa potencija broja 2
y Ako je binarna znamenka (bit) 1:
• Pribroji vrijednost pozicije rezultatu
y u suprotnom (znamenka je 0):
• ne pribrajaš
pribrajaš niš
ništa
y Ponovi za sve preostale znamenke
ƒ Rezultat je dekadska vrijednost binarnog
broja

6
Razmiš
Razmišljajmo binarno
Dekadski Binarni Hexa
0 = 0000 = 0
1 = 0001 = 1
2 = 0010 = 2
3 = 0011 = 3
4 = 0100 = 4
5 = 0101 = 5
6 = 0110 = 6
7 = 0111 = 7
8 = 1000 = 8
9 = 1001 = 9
10 = 1010 = A
11 = 1011 = B
12 = 1100 = C
13 = 1101 = D
14 = 1110 = E
15 = 1111 = F

Cjelobrojne vrijednosti bez


predznaka-
predznaka- (Unsigned)
Unsigned)
ƒ Jedan (oktet) bajt (byte
(byte)) ima 8 bita
ƒ Koje područ
područje vrijednosti možmožemo
pospremiti u jedan bajt?
bajt?
ƒ Najmanja vrijednost: 00000000
y Svu bitovi su nula,
nula, nijedan ne sudjeluje
u vrijednosti broja
ƒ Najveć
Najveća vrijednost:
vrijednost: 11111111
y Svi su bitovi jedinice,
jedinice, svi sudjeluju u
vrijednosti broja

Cjelobrojne vrijednosti bez


predznaka-
predznaka- (Unsigned)
Unsigned)
ƒ Najmanja vrijednost (8 bita
bita)

27 26 25 24 23 22 21 20
(128) (64) (32) (16) (8) (4) (2) (1)

0 0 0 0 0 0 0 0

8 8 8 8 8 8 8 8
= 0

7
Cjelobrojne vrijednosti bez
predznaka-
predznaka- (Unsigned)
Unsigned)
ƒ Najveć
Najveća vrijednost (8 bita
bita)

27 26 25 24 23 22 21 20
(128) (64) (32) (16) (8) (4) (2) (1)

1 1 1 1 1 1 1 1

9 9 9 9 9 9 9 9
128 +64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

Cjelobrojne vrijednosti bez


predznaka-
predznaka- (Unsigned)
Unsigned)
ƒ Za 8 bita
bita:
y Najmanja reprezentativna vrijednost je 0
y Najveć
Najveća reprezentativna vrijednost 255
y Svi ostali brojevi između su
reprezentativni
y Ostali brojevi nisu reprezentativni
ƒ 255 = 28 – 1

Cjelobrojne vrijednosti bez


predznaka-
predznaka- (Unsigned)
Unsigned)
ƒ za n bita
bita
y najmanji reprezentativni broje je 0
• Sve nule
y najveć
najveći reprezentativni broje je 2n – 1
• Sve jedinice
y Svi ostali brojevi između su
reprezentativni
y Ostali brojevi nisu reprezentativni

8
Cjelobrojne vrijednosti bez
predznaka-
predznaka- (Unsigned)
Unsigned)
ƒ C ima unsigned cjelobrojne vrijednosti
različ
različite velič
veličine
ƒ 8 bita
bita (unsigned char)
char)
y 0 do 255
ƒ 16 bita
bita (unsigned short)
short)
y 0 do 65 535
ƒ 32 bita
bita (unsigned long)
long)
y 0 do 4,294,967,295
ƒ 64 bita
bita (unsigned long long)
long)
y 0 do18
do18,446,744,073,709,551,615
ƒ int mož
može biti short ili long
y Zavisi od rač
računala i prevoditelja

Cjelobrojne vrijednosti s
predznakom - (Signed)

Cjelobrojne vrijednosti s
predznakom - (Signed)
ƒ Potrebno je rezervirati jedan bit
intigera za predznak
ƒ Jednostavna tehnika za predznak
vrijednosti
y MSB = 0: broj je pozitivan
y MSB = 1: broj je negativan

0 0 0 0 1 1 1 0 = +14
sign 1 0 0 0 1 1 1 0 = –14
bit

9
Cjelobrojne vrijednosti s
predznakom - (Signed)
ƒ Najmanja vrijednost (8 bita
bita)

–27 26 25 24 23 22 21 20
Ovi bitovi ne
(–128) (64) (32) (16) (8) (4) (2) (1) predstavljaju
128 kao kod
unsigned
1 0 0 0 0 0 0 0 prikaza
intigera.
intigera.

9 8 8 8 8 8 8 8
–128 = –128

Cjelobrojne vrijednosti s
predznakom - (Signed)
ƒ Najveć
Najveća vrijednost (8 bita
bita)

–27 26 25 24 23 22 21 20
Ovi bitovi
(–128) (64) (32) (16) (8) (4) (2) (1) perdstavljaju
+127 kao i
kod unsigned
0 1 1 1 1 1 1 1 prikaza
integera.
integera.

8 9 9 9 9 9 9 9
64 + 32 + 16 + 8 + 4 + 2 + 1 = +127

Cjelobrojne vrijednosti s
predznakom - (Signed)

ƒ 8-bitni
bitni binarni broj
y Najmanja prikazana vrijednost je –128
y Najveć
Najveća prikazana vrijednost je +127
y Sve ostale vrijednosti između te dvije,
dvije, postoje.
y Ostale vrijednost ne postoje.
ƒ Pozitivna vrijednost <= 127 koristi
isti 8-bitni
bitni predlož
predložak kao i kod
unsigned ekvivalenta

10
Cjelobrojne vrijednosti s
predznakom - (Signed)
ƒ Dvije moguć
moguće interpretacije 8-bitnih
bitnih
vrijednosti Binarna Signed dekadska Unsigned dekadska
vrijednost vrijednosti vrijednosti

011111112 +12710 signed i 12710


Pozitivni
011111102 +12610 unsigned 126
12610
011111012 +12510 vrijednosti 12510
Brojevi ... ... iste su za ...
imaju 0 pozitivne
000000102 +210 210
u MSB brojeve
000000012 +110 110
000000002 010 010
111111112 -110 signed i 25510
Negativn 111111102 -210 unsigned 25410
i brojevi ... ... vrijednosti ...
100000102 -12610 razlikuju se 13010
imaju 1
za 256 (28)
u MSB 100000012 -12710 kod 12910
100000002 -12810 negativnih 12810
brojeva

Cjelobrojne vrijednosti s predznakom -


(Signed)

ƒ Kod n-bitnog
bitnog binarnog broja
y –x prikazujemo binarnim kodom s 2n – x
• Npr.
Npr. Prikaz broja –2 s bin.
bin. Kodom je 28 –2
= 254
ƒ To se naziva drugi komplement cijelog
broja s predznakom
ƒ Broj se prikazuje kao komplement
potencije broja dva
ƒ Opseg vrijednosti je od –2n-1 do +2n-1 –1

Cjelobrojne vrijednosti s predznakom -


(Signed)
ƒ C ima signed cjelobrojne vrijednosti
različ
različite velič
veličine
ƒ 8 bita
bita (signed char)
char)
y –128 do +127
ƒ 16 bita
bita (short)
short)
y –32768 do +32767
ƒ 32 bita
bita (long)
long)
y –2 147 483 648 do +2 147 483 647
ƒ 64 bits (long long)
(long long)
y –9 223 372 036 854 775 808 do
+9 223 372 036 854 775 807
ƒ int mož
može biti i short i long

11
Cjelobrojne vrijednosti s predznakom -
(Signed)
ƒ Svojstva drugog komplementa
y MSB ima negativno vrijednosno mjesto (od -2n-1)
y niž
niži bitovi imaju normalno (+ve
(+ve)) vrijednosno
mjesto
y pozitivni brojevi (uključ
uključujuć
ujući nulu)
nulu)
• moraju imati MSB = 0 )
• Nulta vrijednost – svi bitovi su 0
• Predlož
Predložak bitova je isti kao i kod unsigned
vrijednosti
y negativni brojevi
• Moraju imati MSB =1
• Min vrijednost =100…
100…00, 00, max vrijednost =
111…
111…11 = -110

Cjelobrojne vrijednosti s predznakom -


(Signed)

ƒ Kako izgleda +3510 u 8-bitnom


bitnom
drugom komplementu?
komplementu?
Pozitivan, 35 odgovor:
odgovor:
tretira se ÷ 2 = 17 ost.
ost. 1 00100011
kao
unsigned ÷2= 8 ost.
ost. 1
Rezultat
Čitamo prema

÷2= 4 ost.
ost. 0
dodajemo 0

je
do 8 bita

÷2= 2 ost.
ost. 0
gore i

pozitivan:
pozitivan :
MSB = 0
÷2= 1 ost.
ost. 0
÷2= 0 ost.
ost. 1
stop

Cjelobrojne vrijednosti s predznakom -


(Signed)

ƒ Kako izgleda -3510 u 8-bitnom


bitnom
drugom komplementu?
komplementu?
y prikazujemo –35 kao 28 – 35 = 256 – 35 =
221
221
÷2= 110 ost 1 odgovor:
odgovor:
÷2= 55 ost 0 11011101
÷2= 27 ost 1
prema gore

÷2= 13 ost 1
Čitamo

÷2= 6 ost 1 Rezultat je


negativan:
negativan:
÷2= 3 ost 0
MSB = 1
÷2= 1 ost 1
÷2= 0 ost 1

12
Cjelobrojne vrijednosti s predznakom -
(Signed)

ƒ Kako izgleda -3510 u 8-bitnom


bitnom
drugom komplementu?
komplementu?
+3510 = 001000112
Poč
Počnemo s
ekvivalentnim 11011100
pozitivnim flip
brojem bitova +1
dodamo 1

11011101
odgovor:
odgovor:
11011101 Rezultat je
negativan:
negativan: MSB = 1

Cjelobrojne vrijednosti s
predznakom - (Signed) : iz
binarnih
ƒ Koju vrijednost ima 8-bitni
bitni drugi
komplement od 011001
01100111?
y MSB = 0, pozitivan
y Samo pretvaramo iz binarnog u dekadski kao
i za unsigned
–27 26 25 24 23 22 21 20
(–128) (64) (32) (16) (8) (4) (2) (1)

0 1 1 0 0 1 1 1
8 9 9 8 8 9 9 9
64 + 32 + 4 + 2 + 1 = +103

Cjelobrojne vrijednosti s predznakom -


(Signed):
(Signed): iz binarnih

ƒ Koju vrijednost ima 8-bitni


bitni drugi
komplement od 11000100?
y Mož
Možemo pretvarati kao i kod noramlnih
ali je MSB jednak –128

–27 26 25 24 23 22 21 20
(–128) (64) (32) (16) (8) (4) (2) (1)

1 1 0 0 0 1 0 0
9 9 8 8 8 9 8 8
–128+64 + 4 = –60

13
Cjelobrojne vrijednosti s predznakom -
(Signed) : iz binarnih
ƒ Koju vrijednost ima 8-bitni
bitni drugi
komplement od 11000100?
y Negiramo taj –ve binarni broj u +ve ekvivalent,
ekvivalent,
pretvorimo u dekadski,
dekadski, negiramo decimalni
ekvivalent
11000100 dodamo 1
flip
bitova 00111011
odgovor:
odgovor:
+1
Pretvaramo iz –6010
binarnog u dekadski
+6010 00111100
konač
konačno,
no, negiramo dekadsku
vrijednost

Oktalni brojevni sustav


ƒ Baza 8
y Znamenke od 0 do 7
ƒ Rjeđe se koriste,
koriste, jer je hex bolji
prikaz
y Neke aplikacije zahtijevaju rad s
oktalnim prikazom

Oktalni i binarni

010100
010100111
111100
1002

Grupiranje po tri
bita “triplets”
triplets”

2 4 7 48

14
Heksadekadski
Heksadekadski brojevni
sustav
ƒ Baza sustava je B = 16,
16, a znamenke
su 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
y Koristi se za skrać
skraćeno zapisivanje
binarnog sadrž
sadržaja.
aja.
y Zapis se mož
može dobiti iz dekadskog
sukcesivnim dijeljenjem s 16 i
zapisivanjemo ostataka s desna na
lijevo, ali i direktno iz binarnog zapisa

ƒ Primjer:
Primjer:

16-
16-bitni broj 0111 1011 0011 1110
heksadekadski
heksadekadski ekvivalent
ekvivalent 7 B 3 E

Heksadekadski brojevni sustav


ƒ Baza brojevnog sustava je 16
y znamenke 0 do 9, A do F
y Često koristimo “hex”
hex” za short
ƒ “Hex”
Hex” se koristi po konvenciji kao shorthand
za pisanje velikih binarnih vrijednosti
ƒ To je jednostavnije za čitanje
ƒ Kako rač
računalo ne koristi “hex”
hex” interno,
interno, to je
dobra skrać
skraćenica za njegove interne
vrijednosti
y Sve memorijske adrese i podaci su u binarnom
kodu, ali mi koristimo “hex”
hex” za njihov prikaz.

Hex u binarni

5FE116

ispisujemo 4-
bitne
bitne binarne
ekvivalente za
svaku hex
znamenku

0101 11111110 00012

15
Binarni u hex
Dopunimo
ispred s
nulama tako da
mož
možemo
grupirati
0 101001111002
znamenke po
četiri
Grupiramo znakove
u grupe od četiri
znaka (“quartets”
quartets”) s
napiš
napišemo hex desna na lijevo
ekvivalent za
svaku binarnu
četvorku
5 3 C16

Programske baze u C
ƒ U C-
C-u ne piš
pišemo direktno znamenke u
binarnom kodu
ƒ Hex broj u C-
C-u piš
pišemo s prefiksom 0x
(nula,
nula, slovo x)
y 0x53c (1340 dekadski)
dekadski)
y A do F mogu biti manje ili već
veće
ƒ Oktalni broj u C-
C-u piš
pišemo s prefiksom 0
(nula)
nula)
y 02474 (1340 dekadski)
dekadski)
ƒ Dekadski broj piš
pišemo direktno
y 1340
y Interno se svi pospremaju u binarnom kodu

Adresiranje cjelobrojnim
unsigned brojevima

16
Adresiranje memorije
ƒ Za referiranje na bajt,
bajt, moramo ga
moć
moći razlikovati od ostalih bajtova

bajt (8 jedan bit


01101110
bit-
bit-a)
01011010 ostali
00000000 bajtovi
Bajt kojem 01011010
želimo 11010011 Milijun i viš
više
bajtova u oba
pristupiti
smjera

Adresiranje:
Adresiranje: analogija

NA
ULICA PRODAJU

MEMORIJE

41 42 43 je na 44
prodaju

Adresiranje memorije
ƒ Svaka memorijska lokacija ima jedinstvenu
adresu
y Adresa je uvijek integer (cjelobrojni) podatak
y Ne postoje dvije memorijske lokacije s istom
adresom
ƒ Adrese su sekvencijalne (jedna iza druge)
y najniž
najniža adresa 0
y najviš
najviša adresa zavisi od kapaciteta memorije
rač
računala
ƒ Lokacija adrese je nezavisna od njenog
sadrž
sadržaja
y Promjene sadrž
sadržaja neke memorijske lokacije
neć
neće poniš
poništiti njezinu adresu

17
Adresiranje memorije
Najniž
Najniža
adresa
0 11011110 Adrese od 1 do
10,429 su ispuš
ispuštene
radi prikaza na
dijagramu
10430 01101110
Rač
Računalo ima
10431 01011010 16,777,216 bajta (16
megabajta
megabajta)) memorije
10432 00000000
10433 01011010 Adrese od 10,435 do
16,777,214 su
Najviš
Najviša 10434 11010011 ispuš
ispuštene radi prikaza
adresa na dijagramu

16777215 11011001

Adresiranje memorije
Najniž
Najniža
adresa 0 11011110

10430 01101110
10431 01011010 Bajt (byte
(byte)) na
10432 00000000 adresi 10434
10434
sadrž
sadrži
10433 01011010
11010011
10434 11010011
Najviš
Najviša
adresa
16777215 11011001

Cjelobrojne konstante
ƒ Konstante u C-
C-u pisane u dekadskoj notaciji:
notaciji:
7 20 64 -110 8092 65535
34567821
34567821L -17698794l (na starim
prevodiocima)

ƒ Konstante pisane u oktalnoj notaciji:


notaciji:
07 024 0100 0156 017634 0177777
ƒ Konstante pisane u heksadekadskoj notaciji
0x7 0x14 0x40 0x6E 0x1F9C 0xFFFF 0xFFFFFFFF
0xFFFFFFFF
ƒ Konstante bez
bez predznaka piš
pišu se s U ili u na kraju
5645U 3978u 0x7EBU 0xFFFFFFFFU
0xFFFFFFFFU

18
Prikaz realnih brojeva u rač
računalu

ƒ Što je realni broj?


broj?
• 7 2.5 -17.5 1000 0 871236173.8763723
• ⅓ π e

• 3.141592653589793238462643383279502884197169 ≠ π

• 0.333333333333333333333333333333333333333333 ≠ ⅓
ƒ ne postoji nač
način na koji bi se u rač
računalu mogao pohraniti
svaki realni broj. Pohranjuju se približ
približne vrijednosti realnih
brojeva.
brojeva.

Realni tip podatka u jeziku C

ƒ Primjer de
definicije varijabli
varijabli u programskom jeziku C:
float x;
double y;
long double z;

float
double
long

ƒ Programski jezik C ne propisuje preciznost tipova float,


double i long double, ali vrijedi da float ne mož
može biti
precizniji od double, te double ne mož
može biti precizniji od
long double:
float ≤ double ≤ long double

Pretvaranje
retvaranje decimalnog broja iz dekadsko
dekadskog
g
u binarni brojevni sustav

ƒ Cjelobrojni dio dekadskog broja pretvara se u binarni


uzastopnim dijeljenjem,
dijeljenjem, a decimalni uzastopnim
množ
množenjem s 2, gdje cjelobrojni dio dobivenih produkata
tvori decimalne znamenke binarnog broja.
broja.
1.25 = 1 + .25

.25 * 2 1.0 1
0.50

.5 * 2
1.0

19
Množ
Množenje s 2n i 2-n

ƒ Binarni broj se množ


množi s potencijama baze 2 tako da se
binarna toč točka pomakne odgovarajuć
odgovarajući broj mjesta desno
ili lijevo,
lijevo, ovisno o tome je li predznak potencije pozitivan
ili negativan.
negativan.
ƒ Na primjer:
primjer:
1 1 1 * 22 = 1 1 1 0 0
1 .1 1 * 2-2 = 0 . 0 1 1 1

ƒ Kako, međutim
međutim,, u registar pohraniti toč
točku?

Pohrana realnih brojeva u rač


računalu

ƒ Realni brojevi u rač


računalu se pohranjuju u normaliziranom
obliku.

ƒ Kako normalizirani broj pohraniti u registar?

ƒ IEEE (Institute of Electrical and Electronics Engineers)


standard 754 definira nač
način pohrane realnih brojeva

Znanstvena notacija

ƒ Znanstvena notacija za realne brojeve:


brojeve:
exponent
mantissa × base

U C, izraz: 12.456e-2
znači: 12.456 × 10-2

20
Znanstvena notacija

ƒ Mantisa je uvijek normalizirana između 1 i baze (tj,


tj,
samo jedan znač
značajan znak prije toč
točke)
ƒ Nenormaliziran Normaliziran
2997.9 × 105
2997. 2.9979 × 108
B1.39FC × 1611
B1. B.139FC × 1612
0.010110110101 × 2-1
0.010110110101 1.0110110101 × 2-3

Prikaz realnog broja

ƒ Realni broj n je prikazan s aproksimacijom u


pomič
pomičnom zarezu (floating point) n*
(floating--point)
ƒ Rač
Računalo koristi 32 bita
bita (ili viš
više) za pohranu svake
aproksimacije
ƒ Rač
Računalo treba pohraniti
• mantisu
• predznak mantise
• Eksponent (s njegovim predznakom)
predznakom)

Prikaz realnog broja

ƒ Standardni nač
način alokacije 32 bita
bita (IEEE Standard
754) je:
• 23 bita
bita za mantisu
• 1 bit za predznak mantise
• 8 bita za eksponent

31 30 23 22 0

21
Realni
ealni brojevi
brojevi standardne preciznosti

ƒ Tip podatka u programskom jeziku C: float


ƒ Koristi se 4 okteta (32 bita)
ƒ Realni broj se pohranjuje u obliku

31 30 23 22 0
P Karakteristika Mantisa

ƒ P je predznak (P = 1: negativan broj; P = 0: pozitivan broj)


broj)
ƒ Karakteristika:
Karakteristika: binarni eksponent + 127 (time
(time se omoguć
omogućuje pohrana
negativnog eksponenta bez upotrebe tehnike dvojnog komplementa)
karakteristike: K ∈[0,255].
Raspon karakteristike:
Raspon binarnog eksponenta BE ∈ [-126,127]
ƒ Pohranjuje se mantisa
mantisa iz koje je uklonjena vodeć
vodeća jedinica (skriveni bit)

Prikaz realnog broja

• 23 bita
bita za mantisu
• 1 bit za predznak mantise
• 8 bita za eksponent

31 30 23 22 0

Prikaz realnog broja (nast.


nast.)

• 23 bita
bita za mantisu
• 1 bit za predznak mantise
• 8 bita za eksponent

31 30 23 22 0

22
Prikaz realnog broja (nast.
nast.)

• 23 bita
bita za mantisu
• 1 bit za predznak mantise
• 8 bita za eksponent

31 30 23 22 0

Prikaz mantise

ƒ Mantisa je u rasponu
1 ≤ mantisa < baza
baza
ƒ Tako
• Ako imam bazu 2, znamenka ispred toč
točke mora biti 1
• I stoga se mi ne moramo brinuti za njezinu pohranu
te tako imamo 24 bitnu
bitnu preciznost uporabom 23 bita
bita

Prikaz mantise

ƒ 24 bitna
bitna preciznost je ekvivalentna broju od
najmanje 7 decimalnih
decimalnih znamenki :

24
≈ 7.2
log 2 10

23
Prikaz mantise

ƒ Trebamo li pohraniti π:
3.1415926535897932384626433832795.....
ƒ To znač
znači da ga mož
možemo pohraniti samo na sljedeć
sljedeći nač
način:
ƒ 3.141592 (odrež
odrežemo)
emo)
3.141593 (zaokruž
zaokružimo)
imo)

Prikaz eksponenta

ƒ Eksponent se prikazuje kao excess-


excess-127.
127.
ƒ Excess-
Excess-n (n broj bita za prikaz eksponenta) rač
računa se
prema formuli 2 n-1 – 1. Ako koristimo 8 bita za predznak tada je
excess-n=127 (28-1 – 1) = 127
excess-
ƒ Vrijedi da je K = BE + 127 odnosno BE = K - 127
Stvarni eksponent Pohranjena vrijednost
-127 ↔ 00000000
-126 ↔ 00000001
...
0 ↔ 01111111
+1 ↔ 10000000
...
i ↔ (i+127)2
...
+128 ↔ 11111111

Prikaz eksponenta

ƒ IEEE standard ogranič


ograničava eksponent na područ
područje:
–126 ≤ eksponent
ksponent ≤ +127
ƒ Eksponenti –127 and +128 imaju posebno znač
značenje:
enje:
• Ako je eksponent = –127, pohranjena vrijednost je 0
• Ako je eksponent = 128, pohranjena vrijednost je ∞

24
Primjer prikaza broja
01011011 (8-
(8-bitni
bitni stroj)
stroj) ?

0 101 1011
sign exp mantissa
ƒ Mantisa:
Mantisa: 1.1011
ƒ Eksponent
ksponent (excess-
(excess-3 format): 5-3=2
1.1011 × 22 ⇒ 110.11
110.112 = 22 + 21 + 2-1 + 2-2
= 4 + 2 + 0.5 + 0.25 = 6.75

Primjer prikaza broja


prikaž
prikažimo -10.375 (32-
(32-bitni
bitni stroj)
stroj)

10.37510 = 10 + 0.25 + 0.125


= 23 + 21 + 2-2 + 2-3
= 1010.0112 ⇒ 1.0100112 × 23
ƒ Predznak:
Predznak: 1
ƒ Mantisa:
Mantisa: 010011
ƒ Eksponent
ksponent (excess-
(excess-127 format):
3+127 = 13010 = 100000102

1 10000010 01001100000000000000000

Primjer:
Primjer: Prikazati broj 5.75 kao realni broj
1. Realni dekadski broj prikazati u obliku realnog binarnog broja
5.7510 = 101.112
2. Odrediti predznak: broj je pozitivan, stoga je P = 0
3. Normalizirati binarni broj
101.112·20 = 1.01112·22
4. Izračunati karakteristiku i izraziti ju u binarnom obliku
K = 210 + 12710 = 12910 = 1000 00012
5. Izbaciti vodeću jedinicu iz mantise (skriveni bit)
Mantisa (bez skrivenog bita i decimalne toč
točke)
ke) = 01
01112
6. Prepisati predznak, karakteristiku i mantisu bez skrivenog bita u registar

0 10000001 01110000000000000000000
P Karakteristika Mantisa
0100 0000 1011 1000 0000 0000 0000 00002
4 0 B 8 0 0 0 0 16

25
Raspon i preciznost realnih brojeva
standardne preciznosti

ƒ Najmanji pozitivni broj ≠ 0 koji se mož


može prikazati je:
je:

0.000000000000000000000012 *2-126 što iznosi 1.401298464324817 *10-45

ƒ Najveć
Najveći pozitivni broj koji se mož
može prikazati je:
je:

1.111111111111111111111112 * 2127 ≈ 2128 = 3.402823669209 *1038

ƒ Preciznost pohrane broja s mantisom velič


veličine 24 binarne
znamenke je:
je:
224 ≈ 10x Ö 24 log 2 ≈ x log10 Ö x ≈ 24 log 2 = 7.224719895936

(podrazumijeva se 7 prvih važ


važećih znamenki).
znamenki).

Realni brojevi dvostruke preciznosti

ƒ Tip podatka u programskom jeziku C: double


ƒ Koristi se 8 okteta (64 bita)
ƒ Realni broj se pohranjuje u obliku
63 62 52 51 0
P Karakteristika Mantisa

ƒ P je predznak (P = 1: negativan broj; P = 0: pozitivan broj)


broj)
ƒ Karakteristika:
Karakteristika: binarni eksponent + 1023 (11 bita)
bita)
karakteristike: K ∈[0,2047
Raspon karakteristike: [0,2047].
].
Raspon binarnog eksponenta BE ∈ [-1022,
022,1023
1023]]
ƒ Mantisa (52+1 bit).

Realni brojevi dvostruke preciznosti

ƒ Posebni sluč
slučajevi
• Kada je K = 0 i svi bitovi mantise su nula radi se o broju nula
• Kada je K = 0 i postoje bitovi mantise koji nisu 0, tada se radi o
denormaliziranom broju
• Kada je K = 2047 i svi bitovi mantise su 0 radi se o +∞
+∞ ili -∞
• Kada je K = 2047 i postoje bitovi mantise koji nisu 0, tada se ne
radi o prikazu broja (NaN)

26
Raspon i preciznost realnih brojeva
dvostruke preciznosti

ƒ Najmanji pozitivni broj ≠ 0 koji se mož


može prikazati je:
je:
0.0000 ...001 * 2-1022 što je 4.9406 * 10-324

ƒ Najveć
Najveći pozitivni broj koji se mož
može prikazati je:
je:

1.1111.....1111112 * 21023 ≈ 21024 = 1.797693134862316 *10308

ƒ Preciznost pohrane broja s mantisom velič


veličine 53 binarne
znamenke je:
je:
253 ≈ 10x Ö 53 log 2 ≈ x log10 Ö x ≈ 53 log 2 = 15.95458977019

(podrazumijeva se 15 prvih važ


važećih znamenki).
znamenki).

PRIMJER

Zadan je binarni decimalni broj kao mini float (10 bita). Prikazati ga u
obliku
Predznak (normalizirana binarna mantisa) x 2(decimalni exponent)
Pretvori broj u dekadski ekvivalent.
1 1010 11001

Rješenje:
Bit predznaka = 1 - radi se o negativnom broju

Karakteristika je = 10102 = 1010.

BE (binarni eksponent) = K (karakteristika) – 23 – 1= 10 – 7 = 3


Uključivši skriveni bit 1 u mantisi normalizirana mantisa ima oblik :
1.11001 x 23

Odnosno ekvivalentni oblik sveden na x 20 je : -1110.012 = -14.2510

PRIMJER

ƒ 0 10001110 10100000000000000000000
ƒ Rješ
Rješenje: To je C 32-
32-bit float format.
ƒ Bit predznaka = 0 - radi se o pozitivnom broju

ƒ Karakteristika je = 100011102 =(128 + 14)10.

ƒ BE (binarni eksponent) = K (karakteristika) – 127= 128 +14 -127=15

ƒ Uključ
Uključivš
ivši skriveni bit 1 u mantisi normalizirana mantisa ima oblik :
ƒ 1.110100000000000000000000 x 215

ƒ Odnosno ekvivalentni oblik sveden na x 20 je : +1101.0 x 212 = +13.0 x


4096 = +5324810

27
PRIMJER
ƒ 1 01111000 01110000000000000000000

ƒ Rješ
Rješenje: To je C 32-
32-bit float format.
ƒ Bit predznaka = 1 - radi se o negativnom broju

ƒ Karakteristika je = 011110002 = 64 + 32 + 16 + 8 = 96 + 24 = 120.

ƒ BE (binarni eksponent) = K (karakteristika) – 127= 120-


120-127 = -7

ƒ Uključ
Uključivš
ivši skriveni bit 1 u mantisi normalizirana mantisa ima oblik :
ƒ -1.01110000000000000000000 x 2-7

ƒ Odnosno ekvivalentni oblik je : -10111.0 x 2-4 x 2-7


ƒ -10111.0 x 2-11 = -23.0 x 1/2048 = -0.01123046810

PRIMJER
ƒ 0 10000001000 000001010000000000000000000000000000000
0000000000000

ƒ Rješ
Rješenje: To je C “double”
double” 64-
64-bit float format.
ƒ Bit predznaka = 0 - radi se o pozitivnom broju

ƒ Karakteristika je = 100000010002 = (1024 + 8 )10.

ƒ BE (binarni eksponent) = K (karakteristika) – 1023= 1024 +8 -1023= 9

ƒ Uključ
Uključivš
ivši skriveni bit 1 u mantisi normalizirana mantisa ima oblik :
ƒ +1.0000010100000000000000000000000000000000000000000000 x 29

ƒ Odnosno ekvivalentni oblik sveden na x 20 je : +10000010102 = +(512 + 8 +


2) = +52210

PRIMJER

Pretvori dekadsku vrijednost u binarni float format duljine 10 bita ( 1 bit za predznak 4 bita
za karakteristiku i 5 bita za mantisu) :
-6.7 kao "mini-float".
» Rješenje: Kako je broj negativan Bit predznaka = 1.
Cijeli dio broja 6 u binarnom obliku je 110.
Sada pretvorimo 0.7 u binarni decimalni dio:
2 x 0.70 = 0.40 + 1
2 x 0.40 = 0.80 + 0
2 x 0.80 = 0.60 + 1
2 x 0.60 = 0.20 + 1
2 x 0.20 = 0.40 + 0
tako da je 0.7 = 0.101102 za 5-bitnu preciznost
-6.710 = - 110.10110 = - 1.1010110 x 22 u normaliziranom obliku

BE =2. K = BE + 7 = 2 + 7 = 9 = 10012
Kombiniramo bit predznaka = 1, Karakteristiku = 1001, i mantisu = 10101 (bez
skrivenog bita 1) daje :
1 1001 10101 kao mini float's reprezentacija broja -6.7

28
Realne konstante

1. 2.34 9e-
9e-8 8.345e+25 double
2f 2.34F -1.34e5f float
1.L 2.34L -2.5e-
2.5e-37L long double

29

You might also like