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 int float double short long signed unsigned - znakovni tip ili mali cijeli broj - cjelobrojni tip - realni tip - realni tip u dvostrukoj preciznosti - smanuje raspon cjelobrojnih vrijednosti koje varijabla može sadržavati mož sadrž - povećava raspon cjelobrojnihvrijednosti koje varijabla poveć može sadržavati mož sadrž - dozvoljava pridruživanje pozitivnih i negativnih vrijednosti pridruž - dozvoljava pridruživanje samo pozitivnih vrijednosti pridruž

Prefiksi ili kvalifikatori

1

Treba voditi računa kod deklaracije tipa rač 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će moći brojiti do 100000 jer je short int i neć moć ograničen na 32767. ogranič

Binarni brojevi
Kod binarnih brojeva (baza 2), znamenke imaju samo dvije vrijednosti: Jedan bit čuva dvije različite vrijednosti različ Binarni sustav je prirodni način za nač pohranu brojeva u predložak bitova predlož
0 or 1

“bit” znači “binary digit” bit” znač digit”

Binarni sustav je manje kompaktan za prikaz, ali je njegova jednostavnost praktičnija za praktič elektroničku manipulaciju brojeva. elektronič

Vrijednosti pozicija kod brojevnih sustava
DEKADSKI BROJ “256” 256”
Pozicijska vrijednost
Faktor skaliranja

baza - konstantna

znamenke

102 × + 2

101 5

100 6

× + ×

Znamenke (množitelji) množ itelji) područje 0 to 9 (tj. 0 do baza-1) tj. bazapodruč

Uvećava se Uveć zdesna od 0 na lijevo

Eksponent

2

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

24 1

× + × + × + × + × 0 0 1 0

23

22

21

20

Za bazu 2 znamenke su 0 ili 1

Konverzija u binarni sustav
Sve potencije broja 2 su parne
21 = 2, 28 = 256, 215 = 32768, ... 20 = 1 osim nulte

Samo zadnji bit određuje da li je broj paran/neparan

Za razvoj konačne binarne znamenke konač dijelimo sa 2

Ako je broj neparan zadnja znamenka je 1 Ako je broj paran zadnja znamenka je 0

Ostatak dijeljenja (0 ili 1) je binarni znak Kvocijenti se koriste za ponavljanje procedure • 21/2 = 1, 28/2 = 128, 215/2 = 16384, ...

Konverzija u binarni sustav
÷2= ÷2= ÷2= ÷2= ÷2= ÷2= ÷2= 12610 63 31 15 7 3 1 0
prema gore

ost. 0 ost. ost. 1 ost. ost. 1 ost. ost. 1 ost. ost. 1 ost. ost. 1 ost. ost. 1 ost.
Čitaj odozdo

Rezultat je

ZAUSTAVI kada ovaj rezultat postane nula

11111102 111

3

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

12610 = 11011102 11011
Krajnji lijevi bit zove se most significant bit (MSB)

Započinjemo s dekadskim brojem Započ kojeg pretvaramo Ponavljamo: Ponavljamo:

Rekapitulacija - konverzije u binarni sustav

Binarni ekvivalent je kompletan

Podijelimo broj s 2 i ostatak 0 ili 1 zapišemo zapiš Ponavljamo dok broj ne postane jednak nuli Čitamo znamenke u obrnutom redoslijedu od njihovog nastanka tako da je MSB prvi s lijeva

Neke potencije baze 2
Korisno je zapamtiti barem do 212
20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 210 = 1,024 211 = 2,048 212 = 4,096 213 = 8,192 214 = 16,384 215 = 32,768 216 = 65,536 220 = 1, 048, 576 224 = 16, 777 ,216 230 = 1, 073 ,741, 824 231 = 2, 147, 483 ,648 232 = 4 ,294 ,967 ,296

210 = je oko 1,000 (“k”) (“

220 = je oko 1,000,000 (“M”)

4

Pretvaranje binarnog broja u dekadski
27 26 25 24 23 22 21 20
(128) (64) (32) (32) (16) (8) (4) (2) (1)

0

1

1

1

1

0

1

1

Vrijednost pozicije Zbrajanje vrijednosti pozicija za koje je binarna vrijednost 1

+ 32 64+32+16+ 8

+ 2 +1 =

123

Pretvaranje binarnog broja u dekadski
Ili, drugim riječima . . . riječ

011110112 = 12310 011 11011
Indeks označava označ bazu

Pozicijske vrijednosti za različite brojevne različ sustave
Manje baze : manje kompaktno, jednostavniji opseg znamenki, jednostavnija matematika

Prikaz dekadskog broja 2430 u bazama od 2 do 16

Veće baze: kompaktniji Već baze: prikaz, širi opseg prikaz, znamenki, teža znamenki, tež matematika

BAZA 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

VRIJEDNOST 100101111110 10100000 211332 34210 15130 10041 4576 3300 2430 190A 14A6 114C C58 AC0 97E

5

Pozicijske vrijednosti za različite brojevne različ sustave
BAZA 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 VRIJEDNOST 100101111110 10100000 211332 34210 15130 10041 4576 3300 2430 190A 14A6 114C C58 AC0 97E

Znamenke s vrijednostima većim od 9 označavaju se već označ slovima A = (10) B = (11) C = (12) D = (13) E = (14) F = (15) Itd. Itd.

Pozicijske vrijednosti za različite brojevne različ sustave
binarni
BAZA 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 VRIJEDNOST 100101111110 10100000 211332 34210 15130 10041 4576 3300 2430 190A 14A6 114C C58 AC0 97E

Uobičajene baze Uobič (brojevni sustava) u računanju rač

oktalni dekadski

heksadekadski (“hex”) hex”

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

Rezultat je dekadska vrijednost binarnog broja

6

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

Jedan (oktet) bajt (byte) ima 8 bita (byte) Koje područje vrijednosti možemo područ mož pospremiti u jedan bajt? bajt? Najmanja vrijednost: 00000000 Najveća vrijednost: 11111111 Najveć vrijednost:

Cjelobrojne vrijednosti bez predznaka- (Unsigned) predznaka- Unsigned)

Svu bitovi su nula, nijedan ne sudjeluje nula, u vrijednosti broja Svi su bitovi jedinice, svi sudjeluju u jedinice, vrijednosti broja

Cjelobrojne vrijednosti bez predznaka- (Unsigned) predznaka- 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 = 0

7

Cjelobrojne vrijednosti bez predznaka- (Unsigned) predznaka- Unsigned)
Najveća vrijednost (8 bita) Najveć 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 = 255

128 +64 + 32 + 16 + 8 + 4 + 2 + 1

Cjelobrojne vrijednosti bez predznaka- (Unsigned) predznaka- Unsigned)
Za 8 bita: bita
Najmanja reprezentativna vrijednost je 0 Najveća reprezentativna vrijednost 255 Najveć Svi ostali brojevi između su reprezentativni Ostali brojevi nisu reprezentativni

255 = 28 – 1

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

8

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

Cjelobrojne vrijednosti s predznakom - (Signed)

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

0 0 0 0 1 1 1 0
sign bit

= +14 = –14

1 0 0 0 1 1 1 0

9

Cjelobrojne vrijednosti s predznakom - (Signed)
Najmanja vrijednost (8 bita) bita –27 26 25 24 23 22 21 20
(–128) (64) (32) (16) (8) (4) (2) (1)
Ovi bitovi ne predstavljaju 128 kao kod unsigned prikaza intigera. intigera.

1
–128

0

0

0

0

0

0

0

= –128

Cjelobrojne vrijednosti s predznakom - (Signed)
Najveća vrijednost (8 bita) Najveć bita –27 26 25 24 23 22 21 20
(–128) (64) (32) (16) (8) (4) (2) (1)
Ovi bitovi perdstavljaju +127 kao i kod unsigned prikaza integera. integera.

0

1

1

1

1

1

1

1

64 + 32 + 16 + 8 + 4 + 2 + 1

= +127

Cjelobrojne vrijednosti s predznakom - (Signed)
8-bitni binarni broj bitni
Najmanja prikazana vrijednost je –128 Najveća prikazana vrijednost je +127 Najveć Sve ostale vrijednosti između te dvije, postoje. dvije, Ostale vrijednost ne postoje.

Pozitivna vrijednost <= 127 koristi isti 8-bitni predložak kao i kod bitni predlož unsigned ekvivalenta

10

Dvije moguće interpretacije 8-bitnih moguć bitnih vrijednosti
Binarna Signed dekadska vrijednosti Unsigned dekadska vrijednosti vrijednost

Cjelobrojne vrijednosti s predznakom - (Signed)
011111112 011111102 011111012 ... 000000102 000000012 000000002 111111112 111111102 ... 100000102 100000012 100000002 +12710 +12610 +12510 ... +210 +110 010 -110 -210 ... -12610 -12710 -12810 12710 12610 126 12510 ... 210 110 010 25510 25410 ... 13010 12910 12810

Pozitivni Brojevi imaju 0 u MSB

signed i unsigned vrijednosti iste su za pozitivne brojeve signed i unsigned vrijednosti razlikuju se za 256 (28) kod negativnih brojeva

Negativn i brojevi imaju 1 u MSB

Cjelobrojne vrijednosti s predznakom (Signed) Kod n-bitnog binarnog broja bitnog
–x prikazujemo binarnim kodom s 2n – x • Npr. Prikaz broja –2 s bin. Kodom je 28 –2 Npr. bin. = 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čite veličine različ velič 8 bita (signed char) bita char) 16 bita (short) bita short) 32 bita (long) bita long)
–128 do +127 –32768 do +32767 –2 147 483 648 do +2 147 483 647

64 bits (long long) (long long)

int može biti i short i long mož

–9 223 372 036 854 775 808 do +9 223 372 036 854 775 807

11

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

Cjelobrojne vrijednosti s predznakom (Signed)

Kako izgleda +3510 u 8-bitnom bitnom drugom komplementu? komplementu? odgovor: odgovor: 35 Pozitivan, tretira se 00100011 ÷ 2 = 17 ost. 1 ost. kao ÷2= 8 ost. 1 ost. unsigned Rezultat ÷2= 4 ost. 0 ost. je pozitivan: pozitivan: ÷2= 2 ost. 0 ost. MSB = 0 ÷2= 1 ost. 0 ost. ÷2= 0 ost. 1 ost.
Čitamo prema gore i dodajemo 0 do 8 bita stop

Cjelobrojne vrijednosti s predznakom (Signed)

Kako izgleda -3510 u 8-bitnom bitnom drugom komplementu? komplementu?
÷2= ÷2= ÷2= ÷2= ÷2= ÷2= ÷2= ÷2= 221 110 55 27 13 6 3 1 0 ost 1 ost 0 ost 1 ost 1 ost 1 ost 0 ost 1 ost 1

prikazujemo –35 kao 28 – 35 = 256 – 35 = 221

odgovor: odgovor: 11011101

Čitamo prema gore

Rezultat je negativan: negativan: MSB = 1

12

Cjelobrojne vrijednosti s predznakom (Signed)

Kako izgleda -3510 u 8-bitnom bitnom drugom komplementu? komplementu?
Počnemo s Poč ekvivalentnim pozitivnim brojem

+3510 = 001000112
flip bitova

11011100 +1 11011101
Rezultat je negativan: MSB = 1 negativan:

dodamo 1

odgovor: odgovor: 11011101

Koju vrijednost ima 8-bitni drugi bitni komplement od 01100111? 011001

Cjelobrojne vrijednosti s predznakom - (Signed) : iz binarnih
MSB = 0, pozitivan Samo pretvaramo iz binarnog u dekadski kao i za unsigned
(32) (16) (8) (4) (2) (1)

(–128) (64)

–27 26 25 24 23 22 21 20 0 1 1 0
+

0

1

1

1 = +103

64 + 32

4 + 2 + 1

Cjelobrojne vrijednosti s predznakom (Signed): iz binarnih (Signed): Koju vrijednost ima 8-bitni drugi bitni komplement od 11000100? Možemo pretvarati kao i kod noramlnih Mož ali je MSB jednak –128
(–128) (64)

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

1

1

0

0
+

0

1
4

0

0 = –60

–128+64

13

Cjelobrojne vrijednosti s predznakom (Signed) : iz binarnih Koju vrijednost ima 8-bitni drugi bitni komplement od 11000100?

Negiramo taj –ve binarni broj u +ve ekvivalent, ekvivalent, pretvorimo u dekadski, negiramo decimalni dekadski, ekvivalent
flip bitova

Pretvaramo iz binarnog u dekadski +6010

11000100 00111011 +1 00111100

dodamo 1

odgovor: odgovor:

–6010

konačno, negiramo dekadsku konač no, vrijednost

Oktalni brojevni sustav
Baza 8
Znamenke od 0 do 7

Rjeđe se koriste, jer je hex bolji koriste, prikaz
Neke aplikacije zahtijevaju rad s oktalnim prikazom

Oktalni i binarni
0101001111002 010100111100

Grupiranje po tri bita “triplets” triplets”

2 4 7 48

14

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

Primjer: Primjer: 16-bitni broj 16heksadekadski ekvivalent heksadekadski ekvivalent

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

Hex u binarni
5FE116

ispisujemo 4bitne binarne bitne ekvivalente za svaku hex znamenku

0101 11111110 00012

15

Binarni u hex
Dopunimo ispred s nulama tako da možemo mož grupirati znamenke po četiri

0 101001111002
Grupiramo znakove u grupe od četiri znaka (“quartets”) s quartets” desna na lijevo

napišemo hex napiš ekvivalent za svaku binarnu četvorku

5 3 C16

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

Adresiranje cjelobrojnim unsigned brojevima

16

Adresiranje memorije
Za referiranje na bajt, moramo ga bajt, moći razlikovati od ostalih bajtova moć
bajt (8 bit-a) bit01101110 01011010 00000000 01011010 11010011 jedan bit ostali bajtovi
Milijun i više viš bajtova u oba smjera

Bajt kojem želimo pristupiti

Adresiranje: analogija Adresiranje:

ULICA MEMORIJE

NA PRODAJU

41

42

43 je na prodaju

44

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

17

Adresiranje memorije
Najniža Najniž adresa

0 10430 10431 10432 10433 10434

11011110 01101110 01011010 00000000 01011010 11010011

Adrese od 1 do 10,429 su ispuštene ispuš radi prikaza na dijagramu

Računalo ima Rač 16,777,216 bajta (16 megabajta) memorije megabajta)
Adrese od 10,435 do 16,777,214 su ispuštene radi prikaza ispuš na dijagramu

Najviša Najviš adresa

16777215

11011001

Adresiranje memorije
Najniža Najniž adresa

0 10430 10431 10432

11011110 01101110 01011010 00000000 01011010 11010011

Najviša Najviš adresa

10433 10434

Bajt (byte) na (byte) adresi 10434 10434 sadrži sadrž 11010011

16777215

11011001

Cjelobrojne konstante
Konstante u C-u pisane u dekadskoj notaciji: Cnotaciji:

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 predznaka pišu se s U ili u na kraju bez piš 5645U 3978u 0x7EBU 0xFFFFFFFFU 0xFFFFFFFFU

18

Prikaz realnih brojeva u računalu rač
Što je realni broj? broj?
• 7 • 2.5 e -17.5 1000 0 871236173.8763723

⅓ π

• 3.141592653589793238462643383279502884197169 ≠ π • 0.333333333333333333333333333333333333333333 ≠ ⅓

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

Realni tip podatka u jeziku C
Primjer definicije varijabli u programskom jeziku C: de varijabli
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že biti mož precizniji od double, te double ne može biti precizniji od mož long double: float ≤ double ≤ long double

Pretvaranje decimalnog broja iz dekadskog retvaranje dekadskog u binarni brojevni sustav
Cjelobrojni dio dekadskog broja pretvara se u binarni uzastopnim dijeljenjem, a decimalni uzastopnim dijeljenjem, množenjem s 2, gdje cjelobrojni dio dobivenih produkata množ tvori decimalne znamenke binarnog broja. broja. 1.25 = 1 + .25 .25 * 2 0.50 .5 * 2 1.0 1.0 1

19

Množenje s 2n i 2-n Množ
Binarni broj se množi s potencijama baze 2 tako da se množ binarna točka pomakne odgovarajući broj mjesta desno toč odgovarajuć ili lijevo, ovisno o tome je li predznak potencije pozitivan lijevo, 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, u registar pohraniti točku? međutim, toč

Pohrana realnih brojeva u računalu rač
Realni brojevi u računalu se pohranjuju u normaliziranom rač obliku. Kako normalizirani broj pohraniti u registar? IEEE (Institute of Electrical and Electronics Engineers) standard 754 definira način pohrane realnih brojeva nač

Znanstvena notacija

Znanstvena notacija za realne brojeve: brojeve:

mantissa × base

exponent

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čajan znak prije točke) znač toč Nenormaliziran Normaliziran
2997.9 × 105 2997. B1.39FC × 1611 B1. 0.010110110101 × 2-1 0.010110110101 2.9979 × 108 B.139FC × 1612 1.0110110101 × 2-3

Prikaz realnog broja
Realni broj n je prikazan s aproksimacijom u pomičnom zarezu (floating-point) n* pomič (floating-point) Računalo koristi 32 bita (ili više) za pohranu svake Rač bita viš aproksimacije Računalo treba pohraniti Rač • mantisu • predznak mantise • Eksponent (s njegovim predznakom) predznakom)

Prikaz realnog broja

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

31 30

23 22

0

21

Realni brojevi standardne preciznosti ealni brojevi
Tip podatka u programskom jeziku C: float Koristi se 4 okteta (32 bita) Realni broj se pohranjuje u obliku
31 30

P

Karakteristika

23 22

Mantisa

0

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

Prikaz realnog broja
• 23 bita za mantisu bita • 1 bit za predznak mantise • 8 bita za eksponent

31 30

23 22

0

Prikaz realnog broja (nast.) nast.

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

31 30

23 22

0

22

Prikaz realnog broja (nast.) nast.

• 23 bita za mantisu bita • 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čke mora biti 1 toč • I stoga se mi ne moramo brinuti za njezinu pohranu te tako imamo 24 bitnu preciznost uporabom 23 bita bitnu bita

Prikaz mantise

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

24 ≈ 7.2 log 2 10

23

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

Prikaz eksponenta
Eksponent se prikazuje kao excess-127. excess- 127. Excess-n (n broj bita za prikaz eksponenta) računa se Excessrač prema formuli 2 n-1 – 1. Ako koristimo 8 bita za predznak tada je excess-n=127 (28-1 – 1) = 127 excessVrijedi da je K = BE + 127 odnosno BE = K - 127 Stvarni eksponent Pohranjena vrijednost -127 ↔ 00000000 -126 ↔ 00000001 0 +1

...
↔ ↔

i
+128

... ...
↔ ↔

01111111 10000000

(i+127)2
11111111

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

24

Primjer prikaza broja 01011011 (8-bitni stroj) ? (8- bitni stroj)
0 101 1011 sign exp mantissa Mantisa: 1.1011 Mantisa: Eksponent (excess-3 format): 5-3=2 ksponent (excess1.1011 × 22 ⇒ 110.11 110.112 = 22 + 21 + 2-1 + 2-2 = 4 + 2 + 0.5 + 0.25 = 6.75

Primjer prikaza broja prikažimo -10.375 (32-bitni stroj) prikaž (32- bitni stroj)
10.37510 = 10 + 0.25 + 0.125 = 23 + 21 + 2-2 + 2-3 = 1010.0112 ⇒ 1.0100112 × 23 Predznak: 1 Predznak: Mantisa: 010011 Mantisa: Eksponent (excess-127 format): ksponent (excess3+127 = 13010 = 100000102

1 10000010 01001100000000000000000

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

5.7510 = 101.112

101.112·20 = 1.01112·22

K = 210 + 12710 = 12910 = 1000 00012

0

10000001

01110000000000000000000
Mantisa

P Karakteristika

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že prikazati je: mož je:
0.000000000000000000000012 *2-126 što iznosi 1.401298464324817 *10-45

Najveći pozitivni broj koji se može prikazati je: Najveć mož je:
1.111111111111111111111112 * 2127 ≈ 2128 = 3.402823669209 *1038

Preciznost pohrane broja s mantisom veličine 24 binarne velič znamenke je: je:
224 ≈ 10x 24 log 2 ≈ x log10 x ≈ 24 log 2 = 7.224719895936

(podrazumijeva se 7 prvih važećih znamenki). važ 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 P Karakteristika 0 Mantisa

P je predznak (P = 1: negativan broj; P = 0: pozitivan broj) broj) (11 bita) Karakteristika: binarni eksponent + 1023 bita) Karakteristika:
Raspon karakteristike: K ∈[0,2047]. karakteristike: [0,2047]. Raspon binarnog eksponenta BE ∈ [-1022,1023] 022,1023]

Mantisa (52+1 bit).

Realni brojevi dvostruke preciznosti
Posebni slučajevi sluč
• 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že prikazati je: mož je:
0.0000 ...001 * 2-1022 što je 4.9406 * 10-324

Najveći pozitivni broj koji se može prikazati je: Najveć mož je:
1.1111.....1111112 * 21023 ≈ 21024 = 1.797693134862316 *10308

Preciznost pohrane broja s mantisom veličine 53 binarne velič znamenke je: je:
253 ≈ 10x 53 log 2 ≈ x log10 x ≈ 53 log 2 = 15.95458977019

(podrazumijeva se 15 prvih važećih znamenki). važ 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šenje: To je C 32-bit float format. Rješ 32Bit predznaka = 0 - radi se o pozitivnom broju Karakteristika je = 100011102 =(128 + 14)10. BE (binarni eksponent) = K (karakteristika) – 127= 128 +14 -127=15 Uključivši skriveni bit 1 u mantisi normalizirana mantisa ima oblik : Uključ ivš 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šenje: To je C 32-bit float format. Rješ 32Bit predznaka = 1 - radi se o negativnom broju Karakteristika je = 011110002 = 64 + 32 + 16 + 8 = 96 + 24 = 120. BE (binarni eksponent) = K (karakteristika) – 127= 120-127 = -7 120Uključivši skriveni bit 1 u mantisi normalizirana mantisa ima oblik : Uključ ivš -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šenje: To je C “double” 64-bit float format. Rješ double” 64Bit predznaka = 0 - radi se o pozitivnom broju Karakteristika je = 100000010002 = (1024 + 8 )10. BE (binarni eksponent) = K (karakteristika) – 1023= 1024 +8 -1023= 9 Uključivši skriveni bit 1 u mantisi normalizirana mantisa ima oblik : Uključ ivš +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. 2f 1.L 2.34 9e-8 8.345e+25 9e2.34F -1.34e5f 2.34L -2.5e-37L 2.5edouble float long double

29

Sign up to vote on this title
UsefulNot useful