Professional Documents
Culture Documents
LABORATORIJSKE VJEBE
LV1
Zapis cijelih i realnih brojeva u
raunalu
www.etfos.unios.hr
1 UVOD
Brojeve u raunalu prikazujemo binarnim brojem. Pretvorba brojeva se vri na nain opisan
i obraen na kolegiju Programiranje 1. Iako u C programskom jeziku broj bitova int i float
tipova podataka nije definiran, na sustavima koje najee sreemo su implementirani kao
32 bitni ili 64 bitni podaci. Zato emo primjere prikazivati zapisane u 32 bitne ili 64 bitne
registre.
U ovoj vjebi objasnit emo kako zapisujemo cijelobrojne i realne brojeve u memoriji
raunala.
pamti se predznak: -
uzima se apsolutna vrijednost broja ( pozitivna vrijednost ) i taj broj se pretvara u
binarni
nad binarnim brojem se radi komplementiranje unarni komplement
unarnom komplementu se dodaje 1 kako bi se dobio dvojni komplement
Primjer:
Zadan je broj -37. Broj je potrebno prebaciti u 32-bitni binarni zapis u registru.
Uzimamo apsolutnu vrijednost
broja:
Broj 37 pretvaramo u binarni:
i nadopunjavamo ga
s nulama do 32 bita:
zatim radimo komplement:
i dodajemo 1:
i dobivamo rjeenje:
|-37| = 37
37 (10) = 100101(2)
0000 0000 0000 0000 0000 0000 0010 0101
1111 1111 1111 1111 1111 1111 1101 1010
+
1
--------------------------------------1111 1111 1111 1111 1111 1111 1101 1011
2.2
Primjer:
Zadan je 32-bitni binarni broj 1000 0000 0010 1011 0000 0000 0000 0000(2) koji se nalazi u
memorijskom registru. Broj je potrebno pretvoriti u dekadski.
1000 0000 0010 1011 0000 0000 0000 0000 vidimo da je broj negativan jer
je prvi bit s lijeve strane 1.
Potrebno je napraviti
komplement binarnog broja:
koji izgleda ovako:
zatim dodajemo broj 1:
dobivamo dvojni komplement:
2144665600
-2144665600
3.2
dijeljenja (p)
o broj se dijeli s 2p
o u dio za eksponent upisuje se vrijednost E = p + 127, u binarnom zapisu (8 bita)
o razlomaki dio se rauna tako da se uzme dio broja 0.f, mnoi se s 2 te zapisuje
Primjer 1:
Kao primjer pokazat emo pretvaranje broja 32.5 u binarni zapis u registru za realne
brojeve.
32.5 : 25 = 1.015625
32.5 = 1.015625 25
Za prvi broj mantise je uzet broj 1 koji se ne pohranjuje u raunalo i naziva se skriveni bit.
Sada znamo: f = 0.015625 i p = 5.
E = p + 127 = 5 + 127 = 132
Binarni zapis broja 132 je 1000 0100 i taj broj se zapisuje od 31. do 24. bita u registar (E).
Sada je potrebno broj 0.015625 pretvoriti u binarni.
0.015625
0.03125
0.0625
0.125
0.25
0.5
0
x
x
x
x
x
x
x
2
2
2
2
2
2
2
=
=
=
=
=
=
=
0.03125
0.0625
0.125
0.25
0.5
1
0
0
0
0
0
0
1
0
Primjer 2:
Kao primjer pokazat emo pretvaranje broja -0.16 u binarni zapis u registru za realne
brojeve.
Broj = |-0.16| = 0.16
predznak P = 1
x
x
x
x
2
2
2
2
=
=
=
=
0.56
1.12
0.24
0.48
0
1
0
0
0.48
0.96
0.92
0.84
x
x
x
x
2
2
2
2
=
=
=
=
0.96
1.92
1.84
1.68
0
1
1
1
0.68
0.36
x 2 = 1.36
x 2 = 0.72
1
0
0.72
0.44
x 2 = 1.44
x 2 = 0.88
1
0
0.88
0.76
0.52
0.04
x
x
x
x
2
2
2
2
=
=
=
=
1.76
1.52
1.04
0.08
1
1
1
0
0.08
0.16
0.32
0.64
x
x
x
x
2
2
2
2
=
=
=
=
0.16
0.32
0.64
1.28
0
0
0
1
0.28
0.56
0.12
x 2 = 0.56
x 2 = 1.12
x 2 = 0.24
0
1
0
Kod ovog prikaza postoje i tri posebna sluaja koji oznaavaju neke specijalne vrijednosti.
One su:
1. Ako je E = 0 i svi bitovi mantise su 0, radi se o broju 0
2. Ako je E = 255 i svi bitovi mantise su 0, radi se o ako je bit predznaka 1, a + ako je
bit predznaka 0
3. Ako je E = 255, a bilo koji bit mantise nije 0, onda se radi o NaN (Not a Number)
3.3
Exponent
Mantissa
01111111
00100000000000000000000
3.4
Ovdje imamo prikaz broja 32.5, kojeg smo imali u primjeru 1 u prolom potpoglavlju,
zapisanog u 64 bitni registar kao broj s dvostrukom preciznou.
0x4040400000000000 = 01000000 01000000 01000000 00000000
00000000 00000000 00000000 00000000
Sign
Exponent
Mantissa
10000000100
0000010000000000000000000000000000000000000000000000
Moemo vidjeti da za zapis vrijede sva ista pravila kao i dok jednostruke preciznosti, razlika
je jedino u broju bitova potrebnih za zapis pojedinih veliina. Tako predznak i dalje zauzima
1 bit, nakon njega slijedeih 11 bitova slui za zapis eksponenta, te zadnjih 52 bita slui za
zapis razlomakog dijela mantise. Vrijednost eksponenta pri zapisu je = + 1023.
4 ZADACI ZA VJEBU
1. Pretvorite dva sluajna cijela broja u 16-bitni binarni zapis. Jedan treba biti pozitivan,
jedan negativan.
2. Pretvorite dva sluajna realna broja u binarni zapis u 32-bitnom registru za realne
brojeve. Brojevi moraju imati barem 3 decimalna mjesta.
3. Napisati C program koji s tipkovnice uitava 16-bitni binarni broj kao niz znakova (0 i 1) u
znakovno polje. Potrebno je izraunati i na ekran ispisati dekadski zapis uitanog cijelog
binarnog broja.
4. Napisati C program koji s tipkovnice uitava cijeli broj. Potrebno je izraunati i na ekran
ispisati binarni zapis uitanog broja u 32-bitnom registru.
5. Napisati C program koji s tipkovnice uitava realni broj. Potrebno je izraunati i na ekran
ispisati binarni zapis tog realnog broja u 32-bitnom registru.
6. Isti zadatak izvesti s funkcijom BinBr koja rauna i vraa vrijednost binarnog zapisa
realnog broja u 32-bitnom registru.