Zapis brojeva u računalu ZAPIS BROJEVA U RAČUNALU ........................................................................................................................ 2 ZAPIS POZITIVNIH CIJELIH BROJEVA .............................................................................................................................. 2 Zbrajanje cijelih pozitivnih brojeva ................................................................................................................. 3 ZAPIS NEGATIVNIH BROJEVA POMOĆU APSOLUTNE VRIJEDNOSTI ........................................................................................ 4 ZAPIS NEGATIVNIH BROJEVA METODOM DVOJNOG KOMPLEMENTA .................................................................................... 6 Komplement binarnog broja .......................................................................................................................... 8 Dvojni komplement binarnog broja ................................................................................................................ 8 ZAPIS REALNIH BROJEVA U RAČUNALU ........................................................................................................................ 10 Binarni brojevi sa decimalnom točkom ........................................................................................................ 10 Pretvorba iz dekadskog u binarni (s decimalnom točkom) ........................................................................... 10 Množenje i dijeljenje binarnih brojeva sa 2 .................................................................................................. 11 IEEE 754 – zapis realnih brojeva u računalu jednostrukom preciznošću ...................................................... 12 Prikaz realnih brojeva u 32 bita (jednostruka preciznost) ........................................................................... 12 Primjer 1) ................................................................................................................................................................... 12 Primjer 2) ................................................................................................................................................................... 13 Primjer 3) ................................................................................................................................................................... 13 Primjer 4) ................................................................................................................................................................... 13 Primjer 5) ................................................................................................................................................................... 14
Danijel Ptičar
[1]
Zapis brojeva u računalu
Zapis brojeva u računalu Svaki procesor ima drugačije tipove podatka s kojima može računati. Najčešći tip podatka s kojima procesori mogu računati su cijeli brojevi (integer) i realni brojevi (float). Preciznost, odnosno veličina broja s kojim može računati također ovisi o vrsti procesora. Današnji procesori ugrađeni u stolna računala su uglavnom 32 ili 64 bitni, što znači da računalo ima 32 odnosno 64 bita na raspolaganju da pohrani broj. Intel 286 procesor (proizvodio se od 1982. do 1990 god.) je bio 16 bitni procesor, dok je Intel 386 (proizvodio se od 1985 – 2007. Godine) bio 32 bitni procesor. Da bi procesor računao s nekim brojem potrebno je taj broj pohraniti u REGISTAR. REGISTAR možete gledati kao privremenu varijablu u koju moramo spremiti broj s kojim želimo računati. Procesor može imati 1 ili više registara.
Zapis pozitivnih cijelih brojeva Zbog jednostavnosti gledati ćemo procesor koji ima registar veličine 4 bit-a. Analogno je s 32 odnosno 64 bitnim procesorima. U 4 bita možemo pohranit 24 = 16 različitih kombinacija. Brojevi se pohranjuju standardno, tako da dekadski broj pretvorimo u binarni. Broj 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
Vidimo da je najveći cijeli pozitivan broj koji možemo zapisati u 4 bitni registar 24 − 1 = 15
Danijel Ptičar
[2]
Zapis brojeva u računalu Zbrajanje cijelih pozitivnih brojeva Procesor kad zbraja dva cijela pozitivna broja ustvari zbraja 2 binarna broja koja su jednaka brojevima koje želimo zbrojiti. Ako na primjer zadamo 4 bitnom računalu da zbroji 6+8, ono će pretvoriti ta dva broja u binarne i zbrojiti ih. 6 8 14
= = =
0110 1000 1110
Ono što nas zanima je što će se desiti ako je zbroj dva broja veći nego registar procesora ? Kada je zbroj dva broja veći nego registar, procesor jednostavno ignorira bit koji je izvan veličine registra.
15 1 0
= = =
1111 0001 10000
15 2 1
= = =
1111 0010 10001
Tako je ako imamo 4 bitni registar 15+1=0, 15+2=1. Odnosno kad dođemo do najvećeg broja, počinjemo iz početka.
Danijel Ptičar
[3]
Zapis brojeva u računalu
Zapis negativnih brojeva pomoću apsolutne vrijednosti Zapis negativnih brojeva pomoću apsolutne vrijednosti ne koristi računalo, ali ga nekad koriste programeri da si označe negativne brojeve. Ako se koristi zapis brojeva pomoću apsolutne vrijednosti onda prvi bit sa lijeve strane označava predznak. Ako je prvi lijevi bit jednak 1 onda je broj negativan, inače je pozitivan. Preostali bitovi predstavljaju broj. Tako bi kod 4 bitnog računala tablica brojeva prikazanih pomoću apsolutne vrijednosti izgledala kao u tablici. Broj 0 1 2 3 4 5 6 7 0 -1 -2 -3 -4 -5 -6 -7
Binarni 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Dvije su loše strane zapisa brojeva na ovaj način. Manje loša strana je da je broj nula zapisan dva puta, kao 0000 i 1000. Druga loša strana je da zbrajanje 2 ovako zapisana binarna broja ne daju dobar rezultat. 6 = 0110 -2 = 1010 0 = 10000 Vidimo da ako zbrojimo 6 i -2 dobijemo 0, što nije točno ! Iz tog razloga računalo zapisuje negativne brojeve metodom dvojnog komplementa. Primjer 1) Ako je u registru od 8 bitova metodom apsolutne vrijednosti zapisan broj 1010 11102, koji je to broj u bazi 10. 1010 11102 7 bit (ako počnemo brojati od nula s desno na lijevo) je 1 pa je to negativan broj. Gledamo preostalih 7 bitova 010 11102=46. Znači 1010 11102 = - 4610.
Danijel Ptičar
[4]
Zapis brojeva u računalu Primjer 2) Ako je u registru od 8 bitova metodom apsolutne vrijednosti zapisan broj 10 11102, koji je to broj u bazi 10. Nadopunimo nule 0010 11102 7 bit (ako počnemo brojati od nula s desno na lijevo) je 0 pa je to pozitivan broj. Gledamo preostalih 7 bitova 010 11102=46. Znači 10 11102 = 4610. Primjer 3) Kako izgleda binarni zapis broja -1310 metodom apsolutne vrijednosti u registru od 8 bitova? Kako je registar 8 bitni za zapis broja imamo 7 bitova na raspolaganju, a sedmi bit nam služi za predznak. (7 bit ako brojimo od nula, osmi bit ako brojimo od jedan!!) -1310=1??? ???? Broj 13 u binarnom zapisu ima oblik 11012. Nadodamo s desne strane 3 nule tako da imamo 7 bitova. 1310 = 00011012 Zadnji bit s desne strane će biti 1 (jer je broj negativan) -1310=1000 11012 Primjer 4) Kako izgleda binarni zapis broja -1310 metodom apsolutne vrijednosti u registru od 5 bitova? Kako je registar 5 bitni za zapis broja imamo 4 bita na raspolaganju, a 4 bit bit nam služi za predznak. -1310=1???? Broj 13 u binarnom zapisu ima oblik 11012. Ne moramo nadodavati nule jer broj 13 ima 4 bita. Zadnji bit s desne strane će biti 1 (jer je broj negativan) -1310=111012 Primjer 5) Kako izgleda binarni zapis broja -1310 metodom apsolutne vrijednosti u registru od 16 bitova? -1310=1000 0000 0000 11012 Primjer 6) Kako izgleda binarni zapis broja 1310 metodom apsolutne vrijednosti u registru od 16 bitova? 1310=0000 0000 0000 11012
Danijel Ptičar
[5]
Zapis brojeva u računalu
Zapis negativnih brojeva metodom dvojnog komplementa Procesori zapisuju cijele brojeve metodom dvojnog komplementa. Brojevi zapisani na taj način mogu se normalno zbrajati. Binarni broj zapisan metodom dvojnog komplementa u registru veličine k bitova pretvara se u dekadski tako da prvih k-1 bitova s desne strane pretvorimo u dekadski broj, te ako je prvi lijevi bit jednak jedan tom broju dodamo −2k −1 .
−bk −1 ⋅ 2k −1 + bk − 2 ⋅ 2k − 2 + bk −3 ⋅ 2k −3 + ... + b1 ⋅ 21 + b0 ⋅ 20 bk −1bk − 2bk −3 ...b1b0 = Gdje je bi i-ta binarna znamenka (počinjemo brojati od 0) Primjer brojeva zapisanih dvojnim komplementom kod 4 bitnog računala Broj 0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1
Binarni 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Primjer 1) Ako je u 4 bitnom registru zapisan broj 1011 metodom dvojnog komplementa pretvorit ćemo ga u dekadski broj na slijedeći način.
−23
22
1
0
21
20
1
1
1011 = −1 ⋅ 2 + 0 ⋅ 22 + 1 ⋅ 21 + 1 ⋅ 20 =−8 + 2 + 1 =−510 3
Primjer 2) Ako je u 4 bitnom registru metodom dvojnog komplementa zapisan broj 1110
−23
22
1
1
21
20
1
0
1110 = −1 ⋅ 2 + 1 ⋅ 22 + 1 ⋅ 21 + 0 ⋅ 20 =−8 + 4 + 2 =−210 3
Danijel Ptičar
[6]
Zapis brojeva u računalu Još jedno dobro svojstvo brojeva zapisanih metodom dvojnog komplementa je da procesor ne mora znati da li je broj zapisan metodom dvojnog komplementa da bi zbroji dva cijela broja. Dvojni k. 0 1 2 3 4 5 6 7 -8 -7 -6 -5 -4 -3 -2 -1
Broj 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
Broj 1101 može biti -3 ili 13 (ovisno da li je broj zapisan metodom dvojnog komplementa ili ne), broj 0010 je 2 u oba slučaja. -3 ili 13 2
1101 0010 1111 Broj 1111 je -1 ili 15, što odgovara zbroju (-3+2)=1, odnosno (13+2)=15 Idemo pogledati što se dešava ako zbrojimo 1101 + 1110. 1101 = -3 ili 13 1110 = -2 ili 14 -3 ili 13 -2 ili 14
1101 1110 11011 1101+1110 = 1011 = -510 ili 1110 -2 + -3 = -5 štima -3 + 14 = 11 štima -2 + 13 = 11 štima
13 + 14 = 1 3 + 2 + 1 + 11 = 14
Danijel Ptičar
15 + 1 + 11 = 11 štima 0
[7]
Zapis brojeva u računalu Komplement binarnog broja Komplement binarnog broja dobijemo tako da zamijenimo sve jedinice za nule, a nule za jedinice. Da bi napravili komplement binarnog broja moramo znati veličinu registra. Primjer : Registar veličine 8 bitova, ako je A=00101101, Akomplement=11010010
Dvojni komplement binarnog broja Dvojni komplement binarnog broja dobijemo tako da komplementu binarnog broja dodamo 1. Primjer : registar 4 bit-a A=0100=410 Ak=1011 Adk=Ak+1
Ak Adk
+ =
1011 0001 1100
Adk=1100= -410 Dvojni komplement broja 1100 je (0011+1)=0100=410
Primjer 1) U registru od 32 bita zapisan je broj 111111…11100, koji je to broj ? Možemo to računati na način da zbrajamo težinske faktore, odnosno
−231 + 230 + 229 + 228 + ... + 23 + 22 + 0 + 0 . U ovom slučaju lakše je izračunati dvojni komplement broja da dobijemo apsolutnu vrijednost našeg negativnog broja. A=111111…11100 AK=00000…00011 ADK=00000…00100=410 Znači 111111…11100 = -410
Danijel Ptičar
[8]
Zapis brojeva u računalu Primjer 2) Kako izgleda binarni zapis broja -1310 metodom dvojnog komplementa u registru od 8 bitova? Pogledamo koji je zapis broja 13. 1310= 11012 Nadodamo nule tako da imamo 8 znamenaka 1310= 000011012. Tražimo dvojni komplement broja = 000011012! Komplement broja 000011012 je 1111 0010 Da bi dobili dvojni komplement komplementu dodamo 1 1111 0010 + 1 = 1111 00112 Znači da broj -1310 metodom dvojnog komplementa u registru od 8 bitova ima oblim 1111 00112. Možemo napraviti i provjeru. 1111 00112 = -1*2^7 + 1*2^6 +1*2^5 +1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = = -128 + 64 + 32 + 16 + 0 + 0 + 2 + 1 = -1310. (* je množenje, 2^4 = 24 = 16) Primjer 3) Kako izgleda binarni zapis broja 1310 metodom dvojnog komplementa u registru od 8 bitova? Pogledamo koji je zapis broja 13. 1310= 11012 Nadodamo nule tako da imamo 8 znamenaka 1310= 000011012. Primjer 4) U registru od 8 bita zapisan je broj 101010102, koji je to broj ? 101010102= -1*2^7 + 0*2^6 +1*2^5 +0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = = -128 + 32 + 8 + 2 = -8610. Možemo to riješiti i tako da tražimo dvojni komplement. Neka je A = 101010102. Akomplement= 01010101 Advojni komplement=01010101 + 1 = 010101102 = 8610 Kako je ADK=86, slijedi da je A = -86.
Danijel Ptičar
[9]
Zapis brojeva u računalu
Zapis realnih brojeva u računalu Realni brojevi u računalu zapisuju se standardom IEEE754. Da bi mogli razumjeti standard IEEE754 prvo moramo analizirati kako se zapisuju binarni brojevi sa decimalnom točkom. Binarni brojevi sa decimalnom točkom
Ako imamo binarni broj ( zn ....z3 z2 z1 z0 .z−1 z−2 ...z− m + 2 z− m +1 z− m )2 , njegov zapis u dekadskom sustavu je
(z
n
⋅ 2n + .... + z3 ⋅ 23 + z2 ⋅ 22 + z1 ⋅ 21 + z0 ⋅ 20 + z−1 ⋅ 2−1 + z−2 ⋅ 2−2 + ... + z− m +1 ⋅ 2− m +1 + z− m ⋅ 2− m
)
10
Primjer : (1110101.0101)2 = ( ? )10
6 5 4 3 2 1 0 −1 −2 −3 −4 6 5 4 3 2 1 0 −1 −2 −3 −4 1110101. 0 1 0 1 = 1 ⋅ 2 + 1 ⋅ 2 + 1 ⋅ 2 + 0 ⋅ 2 + 1 ⋅ 2 + 0 ⋅ 2 + 1 ⋅ 2 + 0 ⋅ 2 + 1 ⋅ 2 + 0 ⋅ 2 + 1 ⋅ 2 2 1 1 1 1 2 4 8 16 10 1 1 4 +1 5 = 117 + + = 117 + = 117 + = 117.3125 4 16 16 16
Pretvorba iz dekadskog u binarni (s decimalnom točkom) Primjer : (7.1875)10 = ( ? )2 1. Prvo pretvorimo cijeli dio broja u binarni.
( 7 )10 = (111)2
2. Sada pretvaramo decimalni dio 0.1875 u binarni na slijedeći način pišemo 0.1875*2=
0,375
0
0.375*2=
0,75
0
0.75*2=
1,5
1
0.5*2=
1
1
Slijedi da je (.1875)10 = (.0011)2 , odnosno (7.1875)10 = (111.0011)2
Danijel Ptičar
[10]
Zapis brojeva u računalu Treba primijetiti da brojevi koji u dekadskom zapisu imaju konačan broj decimala, ne moraju imati konačan broj decimala u binarnom obliku. Primjer : 0.210= ? 2 0,2 0,4 0,8 0,6 0,2 0,4 0,8 0,6 0,2 0,4 0,8 0,6 0,2 0,4 0,8 0,6
*2 *2 *2 *2 *2 *2 *2 *2 *2 *2 *3 *4 *5 *6 *7 *8
= = = = = = = = = = = = = = = =
0,4 0,8 1,6 1,2 0,4 0,8 1,6 1,2 0,4 0,8 1,6 1,2 0,4 0,8 1,6 1,2
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
Vidimo da broj 0.2 u binarnom zapisu ima beskonačno mnogo znamenaka. Kod takvih brojeva obično odlučimo na koliko decimala ćemo prikazivati broj. Tako ako u gornjem primjeru na primjer odlučimo zaokružiti na 8 decimala imamo broj
0.001100112 = 2−3 + 2−4 + 2−7 + 2−8 =
51 = 0.19921875 , što je približno 2. 256
Iz istog razloga računala često imaju male pogreške prilikom računanja sa realnim brojevima.
Množenje i dijeljenje binarnih brojeva sa 2 Kada binarni broj množimo sa 2 decimalnu točku pomičemo za jedno mjesto u desno, dok kada dijelimo binarni broj sa 2 decimalnu točku pomičemo za jedno mjesto u lijevo.
1102 Primjer : 112 ⋅ 2 = 310
610
Primjer : 112 : 2 = 1.12
310
1.510
Analogno ako binarni broj množimo sa 2k decimalnu točku pomičemo za k mjesta u desno, a kada binarni broj dijelimo sa 2k decimalnu točku pomičemo za k mjesta u lijevo. Množenje binarnog broja sa 2− k isto je kao i dijeljenje binarnog broja sa 2k , odnosno pomičemo decimalnu točku za k mjesta u lijevo.
Danijel Ptičar
[11]
Zapis brojeva u računalu
IEEE 754 – zapis realnih brojeva u računalu jednostrukom preciznošću Svaki binarni broj možemo zapisati u normaliziranom obliku, odnosno u obliku (−1) SGN ⋅ (1.M 2 ) ⋅ 2 BE . Primjer 1) 1011.1010 = 1.0111010 ⋅ 23 , ovdje je M = 0111010 , BE=3, SGN=0
= 1.01 ⋅ 2−3 , ovdje je M = 01 , BE=-3, SGN=0 Primjer 2) 0.00101 Primjer 3) −0.00101 = −1.01 ⋅ 2−3 , ovdje je M = 01 , BE=-3, SGN=1 SGN označava predznak. BE = binarni eksponent M = mantisa Prikaz realnih brojeva u 32 bita (jednostruka preciznost) Prikaz realnih brojeva u 32 bita sastoji se od 3 dijela : • • •
SGN = Predznak (1 bit) K = karakteristika = 127+BE ( 8 bita) M = Mantisa (23 bita)
SGN
karakteristika
mantisa
Ako je K=127+BE, onda je BE=K-127 Primjer 1) 0
0
1
1
1
1
1
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Broj=(-1)0*(1. 01000000000000 000000000*201111100-01111111) SGN = 0 K=0111110 Mantisa = 01000000000000000000000 Slijedeći broj pretvorimo u bazu-10
1.01000000000000000000000 = 1+0.25=1.25
(10)
Pomnožimo 1.25 sa 2124-127 1.25*2-3=0.15625(10) Možemo i na slijedeći način
1.01000000000000000000000 * 2
Danijel Ptičar
=0.001012= 2−3 + 2−5 = 0.1562510
-3
[12]
Zapis brojeva u računalu Primjer 2) 1
1
0
0
0
0
0
0
0
1
1
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Broj=(-1)1*(1. 11001100000000 000000000*200010101-01111111) SGN = 1 K=1000000 BE = K – 127 = 1 Mantisa = 11001100000000000000000 Slijedeći broj pretvorimo u bazu-10 1.11001100000000000000000=1+0.5+0.25+0.03125+0.015625=1.796875(10) Pomnožimo 1.796875 sa 2128-127 1.796875*2=3.59375 Kako je predznak 1 rješenje je broj -3.59375 PRIPAZITI DA NPR. NEBI KAD PRETVARAMO BIN U FLOAT ODUZELI POBRKALI KARAKTERISTIKU I BINARNI EKSPONENT. BINARNA POTENCIJA JE JEDNAKA 2 NA KARAKTERISTIKA-127 BE = K -127 Primjer 3) Uzmimo broj 11.01(2)=3(10)+0.25(10)=3.25(10) Broj 11.01 možemo napisati kao 1.101*21 Predznak je : 0 BE = 1 K = 127+BE=127+1=128 Mantisa je : 101000000000000… Karakteristika je : 128 (1+127) odnosno 10000000(2) 0 10000000 10100000000000000000000 ----------------------------------------------------------------------------------------------------------------------Primjer 4) Broj -0.125(10)=-0.001(2) -0.001(2) se može napisati kao -1.0*2-3 Predznak je : 1 ( jer je broj negativan) BE=-3 Karakteristika je : 124 ( 127+(-3)=124) odnosno 01111100 Mantisa je : 00000000000000000000000
Danijel Ptičar
[13]
Zapis brojeva u računalu Broj zapisan u računalu ima oblik : 1 01111100 00000000000000000000000 ----------------------------------------------------------------------------------------------------------------------Primjer 5) Uzmimo broj 0.1(10) taj broj nema konačan zapis u bazi dva. Idemo ga pretvoriti u bazu-2 Cijeli dio 0,1
*
2
=
0,2
0
0,2
*
2
=
0,4
0
0,4
*
2
=
0,8
0
0,8
*
2
=
1,6
1
0,6
*
2
=
1,2
1
0,2
*
2
=
0,4
0
0,4
*
2
=
0,8
0
Vidimo da će se sada početi sve ponavljati pa broj 0.1(10)=0.00011001100110011001100110011..(2) To možemo zapisati kao 1.10011001100110011001100110011001100110011…(2)*2-4 Predznak je : 0 (broj je pozitivan) Karakteristika je : 123 ( 127+(-4)=123 ) = 01111011(2) Mantisa bi trebala biti 1001100110011001100110011001100110. .. Ali kako mantisa ima 23 bita, a 24 bit je 1 onda zaokružujemo 23 bit na 1 pa dobijemo 10011001100110011001101 (Zadnja jedinica je zaokružena) 0.1(10) = 0 01111011 10011001100110011001101(2)
Danijel Ptičar
[14]