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 tipovi podataka char int float double
- znakovni tip ili mali cijeli broj - cjelobrojni tip - realni tip - realni tip u dvostrukoj preciznosti
Prefiksi ili kvalifikatori short long signed unsigned
- smanuje raspon cjelobrojnih vrijednosti koje varijabla mož može sadrž sadržavati - povećava raspon cjelobrojnihvrijednosti koje varijabla mož može sadrž sadržavati - dozvoljava pridruž pridruživanje pozitivnih i negativnih vrijednosti - dozvoljava pridruž pridruživanje samo pozitivnih vrijednosti
1
Treba voditi računa kod deklaracije tipa podataka!
Primjer u programskom jeziku C
Brojanje voi void d main main () { shor short t int int i; i; i = 0; while while (i < 10000 100000) 0) { i = i + 1; } printf printf ("Goto ("Gotovo! vo!"); "); }
Ovaj program neće mo ći brojiti do 100000 jer je je short int i ograničen na 32767.
Kod binarnih brojeva (baza 2), znamenke imaju samo dvije vrijednosti: or
bit čuva dvije različite vrijednosti Binarni sustav je prirodni na čin za pohranu brojeva u predlož predložak bitova
Jedan
Binarni sustav je manje kompaktan za prikaz, ali je njegova jednostavnost praktičnija za elektroničku manipulaciju brojeva.
“bit” bit” znači “binary digit digit” it”
DEKADSKI BROJ “256” 256”
Faktor skaliranja
102 × + 2
101
100
× + ×
Uvećava se zdesna od 0 na lijevo
2
Za binarni broj “10010” 010” (baza 2) to izgleda ovako Baza je 2
24
23
22
21
20
× + × + × + × + ×
Za bazu 2 znamenke su 0 ili 1
Sve potencije broja 2 su parne
Samo zadnji bit odre đuje da li je broj paran/neparan
21 = 2, 28 = 256, 2 15 = 32768, ... 20 = 1 osim nulte
Ako je broj neparan zadnja znamenka je 1 Ako je broj paran zadnja znamenka je 0
Za razvoj konačne binarne znamenke dijelimo sa 2
Ostatak dijeljenja (0 ili 1) je 1) je binarni znak Kvocijenti se koriste za ponavljanje procedure • 21/2 = 1, 28/2 = 128, 2 15/2 = 16384, ...
÷2= ÷2= ÷2= ÷2= ÷2= ÷2= ÷2=
12610 63 31 15 7 3 1 0
prema gore
ost. ost. 0 ost. ost. 1 ost. ost. 1 ost. ost. 1 ost. ost. 1 ost. ost. 1 ost. ost. 1
ZAUSTAVI kada ovaj rezultat postane nula
Čitaj odozdo
Rezultat je
111 11111102
3
Drugim rije čima . . .
Krajnji desni bit zove se the least significant bit (LSB)
12610 = 11011 11011102 Krajnji lijevi bit zove se most significant bit (MSB)
Započinjemo s dekadskim brojem kojeg pretvaramo Ponavljamo: Ponavljamo: Podijelimo broj s 2 i ostatak 0 ili 1 zapiš zapišemo Ponavljamo dok broj ne postane jednak nuli
Binarni ekvivalent je kompletan
Čitamo znamenke u obrnutom redoslijedu od njihovog nastanka tako da je MSB prvi s lijeva
Korisno je zapamtiti barem do 212
210 = je oko 1,000 (“ (“k ”)
20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 29 = 512 210 = 1,024 1,024 211 = 2,048 2,048
212 = 4,096 213 = 8,192 214 = 16,384 215 = 32,768 216 = 65,536
220 = je oko 1,000,000 (“M”)
220 = 1, 048, 576 224 = 16, 777 ,216 230 = 1, 073 ,741, 824 231 = 2, 147, 483 ,648 232 = 4 ,294 ,967 ,296
4
27 26 25 24 23 22 21 20 (128) (64)
(32) (32)
(16)
(8)
(4)
(2)
(1)
32+16+ 8 64+32+
+ 2 +1 =
123
Ili, drugim rije čima . . .
011 01111011 110112 = 12310 Indeks označava bazu
Prikaz dekadskog broja 2430 u bazama od 2 do 16
Veće baze: baze: kompaktniji prikaz, prikaz, širi opseg znamenki, znamenki, tež teža matematika
BAZA 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
VRIJEDNO VRIJEDNOST ST 100101111110 10100000 211332 34210 15130 10041 4576 3300 2430 190A 14A6 114C C58 AC0 97E
5
BAZA BAZA 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
VRIJEDNOS VRIJEDNOST T 100101111110 10100000 211332 34210 15130 10041 4576 3300 2430 190A 14A6 114C C58 AC0 97E
Znamenke s vrijednostima već većim od 9 označ označavaju se slovima A = (10) B = (11) C = (12) D = (13) E = (14) F = (15) Itd. Itd.
Uobičajene baze (brojevni sustava) u računanju
VRIJEDNO VRIJEDNOST ST 100101111110 10100000 211332 34210 15130 10041 4576 3300 2430 190A 14A6 114C C58 AC0 97E
Postavi rezultat na nulu Za svaku znamenku (bit):
BAZA 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Pridruž Pridruži joj dekadsku vrijednost pozicije • Iz skupa potencija broja 2 Ako je binarna znamenka (bit) 1: • Pribroji vrijednost pozicije rezultatu u suprotnom (znamenka je 0): • ne pribrajaš pribrajaš niš ništa Ponovi za sve preostale znamenke
Rezultat je dekadska vrijednost binarnog broja
6
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) byte) ima 8 bita Koje podru č je vrijednosti mo žemo pospremiti u jedan bajt? bajt ? Najmanja vrijednost: 00000000
Najveća vrijednost: vrijednost: 11111111
Svu bitovi su nula, nula , nijedan ne sudjeluje u vrijednosti broja Svi su bitovi jedinice jedinice,, svi sudjeluju u vrijednosti broja
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
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
128 +64 + 32 + 16 + 8 + 4 + 2 + 1
=
255
Za 8 bita bita: Najmanja reprezentativna vrijednost je 0 Najveća reprezentativna vrijednost 255 Svi ostali brojevi izme đu su reprezentativni Ostali brojevi nisu reprezentativni
255 = 28 – 1
za n bita bita
najmanji reprezentativni broje je 0 • Sve nule
najveći reprezentativni broje je 2n – 1 • Sve jedinice
Svi ostali brojevi izme đu su reprezentativni Ostali brojevi nisu reprezentativni
8
C ima unsigned cjelobrojne vrijednosti različite veli čine 8 bita bita (unsigned unsigned char )
0 do 255
16 bita bita (unsigned short )
32 bita bita (unsigned long )
64 bita bita (unsigned long long )
0 do 65 535 0 do 4,294,967,295 0 do18 do18,446,744,073,709,551,615
int mo mož že biti short ili long
Zavisi od računala i prevoditelja
Potrebno je rezervirati jedan bit intigera za predznak Jednostavna tehnika za predznak vrijednosti
sign bit
MSB = 0: broj je pozitivan MSB = 1: broj je negativan
0 0 0 0 1 1 1 0
= +14
1 0 0 0 1 1 1 0
= –14
9
Najmanja vrijednost (8 bita bita)
–27 26 25 24 23 22 21 20 (–128) (64)
(32)
(16)
(8)
(4)
(2)
(1)
1
0
0
0
0
0
0
0
= –128
–128
Ovi bitovi ne predstavljaju 128 kao kod unsigned prikaza intigera. intigera.
Najveća vrijednost (8 bita bita)
–27 26 25 24 23 22 21 20 (–128) (64)
(32)
(16)
(8)
(4)
(2)
(1)
0
1
1
1
1
1
1
1
64 + 32 + 16 + 8 + 4 + 2 + 1
= +127
8-bitni bitni binarni broj
Ovi bitovi perdstavljaju +127 kao i kod unsigned prikaza integera. integera.
Najmanja prikazana vrijednost je –128 Najveća prikazana vrijednost je +127 Sve ostale vrijednosti između te dvije, dvije, postoje. Ostale vrijednost ne postoje.
Pozitivna vrijednost <= 127 koristi isti 8-bitni bitni predlož predložak kao i kod unsigned ekvivalenta
10
Pozitivni Brojevi imaju 0 u MSB
Negativn i brojevi imaju 1 u MSB
Unsigned dekadska
vrijednosti
vrijednosti
+12710 +12610 +12510 ... +210 +110 010 -110 -210 ... -12610 -12710 -12810
signed i unsigned vrijednosti iste su za pozitivne brojeve signed i unsigned vrijednosti razlikuju se za 256 (2 8) kod negativnih brojeva
12710 126 12610 12510 ... 210 110 010 25510 25410 ... 13010 12910 12810
Kod n-bitnog bitnog binarnog broja
01111111 011111112 01111110 011111102 01111101 011111012 ... 00000010 000000102 00000001 000000012 00000000 000000002 11111111 111111112 11111110 111111102 ... 10000010 100000102 10000001 100000012 10000000 100000002
Signed dekadska
–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
C ima signed cjelobrojne vrijednosti različite veli čine 8 bita bita (signed signed char )
16 bita bita (short)
32 bita bita (long )
–128 do +127 –32768 do +32767 –2 147 483 648 do +2 147 483 647
64 bits ( long long ) –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
Svojstva drugog komplementa
MSB ima negativno vrijednosno mjesto (od -2n-1) niž niži bitovi imaju normalno (+ve (+ve) ve) vrijednosno mjesto pozitivni brojevi (uključ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 negativni brojevi • Moraju imati MSB =1 • Min vrijednost =100… 100…00, 00, max vrijednost = 111… 111…11 = -110
Kako izgleda +3510 u 8-bitnom bitnom drugom komplementu? komplementu ? odgovor: odgovor: 35 Pozitivan, tretira se 00100011 ÷ 2 = 17 ost. ost. 1 kao ÷2= 8 ost. ost. 1 a unsigned m 0 a Rezultat ÷2= 4 ost. ost. 0 e t je r i o i p e m bpozitivan: r j e 8pozitivan: ÷2= 2 ost. ost. 0 o o a m g d o MSB = 0 a o d ÷2= 1 ost. ost. 0 i t d ÷2= 0 ost. ost. 1
Č Č
stop
Kako izgleda -3510 u 8-bitnom bitnom drugom komplementu? komplementu ?
prikazujemo –35 kao 28 – 35 = 256 – 35 = 221 221 ÷ 2 = 110 ÷2= 55 ÷2= 27 ÷2= 13 ÷2= 6 ÷2= 3 ÷2= 1 ÷2= 0
ost 1 ost 0 ost 1 ost 1 ost 1 ost 0 ost 1 ost 1
odgovor: odgovor: 11011101 e r o o m g a a t i m Č e r p
Rezultat je negativan: negativan: MSB = 1
12
Kako izgleda -3510 u 8-bitnom bitnom drugom komplementu? komplementu ? +3510 = 001000112 11011100
flip bitova
+1 dodamo 1
11011101
odgovor: odgovor: 11011101
Koju vrijednost ima 8-bitni bitni drugi komplement od 011001 01100111?
MSB = 0, pozitivan 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
64 + 32
+
4 + 2 + 1
= +103
Koju vrijednost ima 8-bitni bitni drugi komplement od 11000100? Mož Možemo pretvarati kao i kod noramlnih ali je MSB jednak 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
–128+64
+
4
=
–60
13
Koju vrijednost ima 8-bitni bitni drugi komplement od 11000100?
Negiramo taj –ve binarni broj u +ve ekvivalent, ekvivalent, pretvorimo u dekadski, dekadski , negiramo decimalni ekvivalent flip bitova
Pretvaramo iz binarnog u dekadski +6010
11000100 00111011
dodamo 1
odgovor: odgovor:
+1
–6010
00111100 konačno, no, negiramo dekadsku vrijednost
Baza 8
Znamenke od 0 do 7
Rjeđe se koriste, koriste , jer je hex bolji prikaz
Neke aplikacije zahtijevaju rad s oktalnim prikazom
010100 010100111 100111100 1111002
Grupiranje po tri bita “triplets” triplets”
2 4 7 48
14
Baza sustava je sustava je su
, a znamenke
Koristi se za skraćeno zapisivanje binarnog sadrž sadržaja. aja. 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: 1616-bitni broj heksadekadski heksadekadski ekvivalent ekvivalent
Baza brojevnog sustava je 16
0111 1011 0011 1110
znamenke 0 do 9, A do F Č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čunalo ne koristi “hex” hex” interno, interno, to je dobra skraćenica za njegove interne vrijednosti
Sve memorijske adrese i podaci su u binarnom kodu, ali mi koristimo “hex” hex” za njihov prikaz.
5FE116
ispisujemo 4bitne bitne binarne ekvivalente za svaku hex znamenku
0101 11111110 00012
15
0 101001111002
napiš napišemo hex ekvivalent za svaku binarnu četvorku
Grupiramo znakove u grupe od četiri znaka (“quartets” quartets”) s desna na lijevo
5 3 C16
U CC-u ne piš pi šemo direktno znamenke u binarnom kodu Hex broj u CC-u piš pišemo s prefiksom 0x (nula, nula, slovo x)
0x53c (1340 dekadski ) A do F mogu biti manje ili ve će
Oktalni broj u CC-u piš pišemo s prefiksom 0 (nula) nula)
Dekadski broj piš pišemo direktno
02474 (1340 dekadski )
1340 Interno se svi pospremaju u binarnom kodu
16
Za referiranje na bajt, bajt , moramo ga moći razlikovati od ostalih bajtova
bajt (8 bitbit-a)
Bajt kojem želimo pristupiti
jedan bit
01101110 01011010 00000000
ostali bajtovi
01011010 11010011
Milijun i viš više bajtova u oba smjera
NA PRODAJU
41
44
Adresa je uvijek integer (cjelobrojni) podatak Ne postoje dvije memorijske lokacije s istom adresom
Adrese su sekvencijalne (jedna iza druge)
43 je na 43 je prodaju
Svaka memorijska lokacija ima jedinstvenu adresu
42
najniž najniža adresa 0 najviš najviša adresa zavisi od kapaciteta memorije računala
Lokacija adrese je nezavisna od njenog sadrž sadržaja
Promjene sadrž sadržaja neke memorijske lokacije neće poni poniš štiti njezinu adresu
17
Najniž Najniža adresa
0
11011110
10430 10431
01101110 01011010
10432 10433 10434
00000000 01011010
16777215
11011001
Najviš Najviša adresa
Najniž Najniža adresa
Računalo ima 16,777,216 bajta (16 megabajta megabajta) bajta) memorije Adrese od 10,435 do 16,777,214 su ispuš ispuštene radi prikaza na dijagramu
11010011
0
11011110
10430 10431
01101110 01011010
10432 10433
00000000 01011010
10434
11010011
16777215
11011001
Najviš Najviša adresa
Adrese od 1 do 10,429 su ispuš ispuštene radi prikaza na dijagramu
Bajt (byte (byte) byte) na adresi 10434 10434 sadrž sadrži 11010011
Konstante u CC-u pisane u dekadskoj notaciji: notaciji:
7
20 64 34567821
-110
8092
65535
34567821L -17698794l (na starim prevodiocima)
Konstante pisane u oktalnoj notaciji: notaciji:
Konstante pisane u heksadekadskoj notaciji
Konstante bez bez predznaka piš pišu se s
07
024
0x7 5645U
0x14
0100
0156
0x40 0x6E 3978u
017634 0177777 0x1F9C
0x7EBU
0xFFFF
ili
0xFFFFFFFF 0xFFFFFFFF
na kraju
0xFFFFFFFFU 0xFFFFFFFFU
18
Prikaz realnih brojeva u računalu Što je realni broj? broj ?
7
• •
⅓ ⅓
• •
• •
• •
2.5
-17.5
1000
0
871236173.8763723
e
3.141592653589793238462643383279502884197169
≠
0.333333333333333333333333333333333333333333
≠
⅓
ne postoji način na koji bi se u 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 programskom jeziku C:
float x; double y; long double z; float double long
Programski jezik C ne propisuje preciznost tipova float , može biti double i long double long double , ali vrijedi da float ne mož precizniji od double , te double ne mož može biti precizniji od long double long long double :
float
double
long double
Pretvaranje retvaranje decimalnog broja iz dekadsko dekadskog kadskog 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čka pomakne odgovarajući broj mjesta desno ili lijevo, lijevo, ovisno o tome je tome je li predznak potencije 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 međutim, utim, u registar pohraniti to čku?
Pohrana realnih brojeva u ra čunalu
Realni brojevi u ra čunalu se pohranjuju u normaliziranom obliku.
Kako normalizirani broj pohraniti u registar?
IEEE (Institute of Electrical and Electronics Engineers) standard 754 definira na čin pohrane realnih brojeva
Znanstvena notacija
Znanstvena notacija za realne brojeve : exponent
mantissa × base
U C, izraz: izraz: 12.456e-2 znač znači: 12.456 × 10-2
20
Znanstvena notacija Mantisa je Mantisa je uvijek normalizirana između 1 i baze (tj, tj, samo jedan zna čajan znak prije to čke) Nenormaliziran Normaliziran
2997. 2997.9 × 105 B1. B1.39FC × 1611 0.010110110101 0.010110110101
×
2-1
2.9979 × 108 B.139FC × 1612 1.0110110101 × 2-3
Prikaz realnog broja
Realni broj n je je prikazan s aproksimacijom u pomičnom zarezu (floating (floatingfloating-point) point) n* Računalo koristi 32 bita bita (ili viš više) za pohranu svake aproksimacije Računalo treba pohraniti • mantisu • predznak mantise predznak mantise • Eksponent (s njegovim predznakom) predznakom)
Prikaz realnog broja
Standardni način alokacije 32 bita bita (IEEE Standard 754) je: 754) je: • 23 bita bita za mantisu • 1 bit za predznak mantise predznak mantise • 8 bita za eksponent
3130
23 22
0
21
R ealni ealn brojevi standardne preciznosti ealni brojevi
Tip podatka u programskom jeziku programskom jeziku C: float Koristi se 4 okteta (32 bita) Realni broj se pohranjuje u obliku 31 30 23 22 P Karakteristika
0 Mantisa
P je predznak (P predznak (P = 1: negativan broj; P = 0: pozitivan broj) broj) Karakteristika: Karakteristika: binarni eksponent + 127 (time (time se omogu ćuje pohrana negativnog eksponenta bez upotrebe tehnike dvojnog komplementa) Raspon karakteristike: karakteristike: K ∈[0,255]. Raspon binarnog eksponenta BE ∈ [-126,127]
Pohranjuje se mantisa m antisa iz koje je uklonjena vodeća jedinica (skriveni bit)
Prikaz realnog broja • 23 bita bita za mantisu • 1 bit za predznak mantise predznak mantise • 8 bita za eksponent
3130
23 22
0
Prikaz realnog broja (nast. nast.)
• • •
3130
23 bita bita za mantisu 1 bit za predznak mantise predznak mantise 8 bita za eksponent
23 22
0
22
Prikaz realnog broja (nast. nast.)
• 23 bita bita za mantisu • 1 bit za predznak mantise predznak mantise • 8 bita za eksponent
3130
0
23 22
Prikaz mantise
Mantisa je je u rasponu 1 ≤ mantisa < ba za za
Tako • Ako imam bazu 2, znamenka ispred 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 log 2 10
≈
7.2
23
Prikaz mantise
Trebamo li pohraniti π: 3.1415926535897932384626433832795..... 3.14159265358979323846 3.1415926535 897932384626433832795 26433832795..... ..... To znači da ga mo žemo pohraniti samo na sljedeći način: 3.141592 (odrež odrežemo) emo) 3.141592 3.141593 (zaokruž zaokružimo) imo) 3.141593
Prikaz eksponenta
Eksponent se prikazuje kao excess - -127 1 27 .
Excess - -n (n broj bita za prikaz eksponenta) ra č una se 1 – 1. prema formuli 2 n - -1 – 1. Ako koristimo 8 bita za predznak pred znak tada je predznak 1 – 1) excess - – 1) = 127 -n=127 n =127 (2 8 - -1
Vrijedi da je K = BE + 127 odnosno BE = K - 127 Stvarni eksponent Pohranjena vrijednost ↔ -127 00000000 00000000 ↔ -126 00000001 00000001 ... ↔ 0 01111111 01111111 ↔ +1 10000000 10000000 ... i ↔ ( i i+127) +127) 2 ... ↔ +128 11111111 11111111
Prikaz eksponenta
IEEE standard ograničava eksponent na podru č je: –126 –126 ≤ e ks ponent ≤ +127 ks Eksponenti – Eksponenti –127 –127 and +128 imaju posebno 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.011 2 ⇒ 1.0100112 × 23 Predznak : 1 Mantisa: Mantisa: 010011 Eksponent ksponent (excess(excess-127 format): 3+127 = 130 10 = 10000010 2
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.11 2
2. Odrediti predznak: broj je pozitivan, stoga je P = 0 3. Normalizirati binarni broj 101.112·20 = 1.0111 2·22
4. Izračunati karakteristiku i izraziti ju u binarnom obliku K = 210 + 127 10 = 12910 = 1000 0001 2
5. Izbaciti vode ću jedinicu iz mantise (skriveni bit) Mantisa (bez skrivenog bita i decimalne to čke) ke) = 01 01112 6. Prepisati predznak, karakteristiku i mantisu mantisu bez skrivenog bita u registar registar 0
10000001
P Karakteristika
01110000000000000000000 01110000000000000000000
Mantisa
0100 0000 1011 1000 0000 0000 0000 0000 2
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 prikazati je: je: 0.000000000000000000000012 *2-126 što iznosi iznosi 1.401298464324817 *10-45
Najveći pozitivni broj koji se mož može prikazati je prikazati je: je: 1.111111111111111111111112 * 2127 ≈ 2128 = 3.402823669209 *1038
Preciznost pohrane broja s mantisom veličine 24 binarne znamenke je 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 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 predznak (P = 1: negativan broj; P = 0: pozitivan broj) broj) Karakteristika: Karakteristika: binarni eksponent + 1023 (11 bita) bita) Raspon karakteristike: karakteristike: K ∈[0,2047 [0,2047]. 2047]. Raspon binarnog eksponenta BE ∈ [-1022, 022,1023 2,1023] 1023]
Mantisa (52+1 bit).
Realni brojevi dvostruke preciznosti
Posebni slučajevi • Kada je K = 0 i svi bitovi mantise su nula radi se oo broju ula broju nnula • 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 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 prikazati je: je: 0.0000 ...001 * 2-1022 što je to je 4.9406 * 10-324
Najveći pozitivni broj koji se mož može prikazati je prikazati je: je: 1.1111.....1111112 * 21023 ≈ 21024 = 1.797693134862316 *10308
Preciznost pohrane broja s mantisom veličine 53 binarne znamenke je 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 decimalni broj kao mini float (10 bita). Prikazati ga u obliku Predznak (normalizirana binarna binarna mantisa ) x 2(decimalniexponent)
Pretvori broj u dekadski ekvivalent.
Rješenje: Bit predznaka = 1 - radi se o negativnom negativnom broju
Karakteristika je = 10102 = 1010. BE (binarni eksponent) eksponent) = K (karakteristika) – 23 – 1= 10 10 –7 = 3 Uključivši skriveni bit 1 u mantisinormalizirana mantisa ima oblik : 1.11001 x 23 Odnosno ekvivalentni oblik sveden na x 2 0 je : -1110.01 2 = -14.2510
PRIMJER
Rješ Rješenje: To je C 3232 - bit float format.
Bit predznaka = 0 - radi se oo pozitivnom broju
Karakteristika je = = 10001110 100011102 =(128 + 14)10.
BE (binarni eksponent) = K (karakteristika) – (karakteristika) – 127= 128 +14 -127=15
Uključivš ivši skriveni bit 1 u mantisi normalizirana mantisa ima oblik : 1.110100000000000000000000 x 215
Odnosno ekvivalentni oblik sveden na x 2 0 je : +1101.0 x 2 12 = +13.0 x 4096 = +5324810
27
PRIMJER
Rješ Rješenje: To je C 3232 - 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) – (karakteristika) – 127= 120120-127 = -7
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” 6464- bit float format.
Bit predznaka = 0 - radi se oo pozitivnom broju
Karakteristika je = 100000010002 = (1024 + 8 )10.
BE (binarni eksponent) = K (karakteristika) – (karakteristika) – 1023= 1024 +8 -1023= 9
Uključivš ivši skriveni bit 1 u mantisi normalizirana mantisa ima oblik : +1.0000010100000000000000000000000000000000000000000000 x 29
Odnosno ekvivalentni oblik sveden na x 2 0 je : +1000001010 +10000010102 = +(512 + 8 +
2) = +522 10
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 » Rješenje: Kako je broj negativan Bit predznaka predznaka = 1. Cijeli dio broja 6 u binarnom obliku je 110. Sada pretvorimo 0.7 u binarni decimalni 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 110.10110 = - 1.1010110 1.1010110 x 22 u normaliziranom obliku
BE =2. K = BE + 7 = 2 + 7 = 9 = 10012 Kombiniramo Kombiniramo bit predznaka = 1, Karakteristiku = 1001, i mantisu mantisu = 10101 (bez skrivenog bita 1) daje : 1 1001 10101 kao mini float's reprezentacija reprezentacija broja -6.7
28
Realne konstante 1. 2f 1.L
2.34 2.34F 2.34L
9e9e-8 8.345e+25 -1.34e5f -2.5e2.5e-37L
double double float long double
29