LUKUJÄRJESTELMÄMUUNNOKSET HTOL Digitaalitekniikan perusteet Luku 8 Sivu 1 (43) 1998-1999 Luentokalvoseloste 12.6.1998 Fe LUKUJÄRJESTELMÄMUUNNOKSET k10 210 2´s10 10 8 10 16 102 102´s 28 82 216 162
Johdanto Tässä luvussa perustellaan, miksi on tarpeellista osata muuntaa lukuja lukujärjestelmästä toiseen esitetään lukujen muuntaminen lukujärjestelmästä toiseen keskitytään erityisesti muunnoksiin kymmenjärjestelmän ja kaksijärjestelmän lukujen välillä käsitellään lyhyesti myös muita digitaalilaitteiden yhteydessä tarpeellisia muunnoksia Luvun tavoitteena on opettaa ymmärtämään lukujärjestelmämuunnosten tarpeellisuus opettaa muuntamaan lukuja lukujärjestelmästä toiseen, erityisesti tekemään muunnoksia kymmenjärjestelmän ja kaksijärjestelmän lukujen välillä
Lukujärjestelmämuunnokset Ihminen haluaa antaa syöttötiedot kymmenjärjestelmässä Tietokone käsittelee parhaiten binaarilukuja tarvitaan muunnos 10-järjestelmästä 2-järjestelmään Tietokone laskee tulokset binaarilukuina Ihminen haluaa tulostiedot kymmenjärjestelmän lukuina tarvitaan muunnos 2-järjestelmästä 10-järjestelmään Suunnittelija ja ohjelmoija tarvitsevat muitakin muunnoksia 10-järjestelmä 16-järjestelmä 16-järjestelmä 10-järjestelmä 2-järjestelmä 16-järjestelmä havainnollisuus, lyhyt esitys 16-järjestelmä 2-järjestelmä bittitason signaalien tarkastelu 2-järjestelmä 8-järjestelmä 8-järjestelmä 2-järjestelmä 10 2 merkkikoodien esitys, muistipaikkojen numerot jne. joissain järjestelmissä käytetään oktaalilukuja
Etumerkittömän luvun muunnos muusta järjestelmästä kymmenjärjestelmään Käytetään esityksen määrittelyn summakaavaa Tehdään laskutoimitus kymmenjärjestelmässä Kätevä tehdä esimerkiksi laskimella 210 Esimerkiksi muunnos kaksijärjestelmästä kymmenjärjestelmään: Luku on Bn Bn-1 … B2 B1 B0 , B-1 B-2 B-3 … B-m Käytetään summakaavaa: B = Bn · 2n + Bn -1 · 2n -1 + … + B2 · 22 + B1 · 21 + B0 · 20 + B-1 · 2-1 + B-2 · 2-2 + B-3 · 2-3 + … + B-m · 2-m Esimerkki: 10101,012 = 1·24 + 0·23 + 1·22 + 0·21 + 1·20 + 0·2-1 + 1·2-2 = 21,2510
Etumerkittömän luvun muunnos kymmenjärjestelmästä muuhun järjestelmään Muunnetaan kokonaisosa Muunnetaan murto-osa Yhdistetään tulokset 10k :k Kokonaisosan muunnosalgoritmi jaetaan muunnettavaa lukua jatkuvasti muun järjestelmän kantaluvulla erotetaan jakojäännökset jatketaan, kunnes osamäärä on nolla muunnostulos saadaan jakojäännöksistä ·k Murto-osan muunnosalgoritmi kerrotaan muunnettavaa lukua jatkuvasti muun järjestelmän kantaluvulla erotetaan kokonaisosat jatketaan, kunnes murto-osa on nolla tai on saatu riittävä muunnostulos muunnostulos saadaan kokonaisosista
Muunnos 10-järj:stä 2-järjestelmään, kokonaisosa Esimerkki: muunna 999,57812510 kaksijärjestelmään. Esityspituus on 32 bittiä, josta 22 bittiä kokonaisosassa. Muunnetaan kokonaisosa: Jakolaskut Tulokset Jakojäännökset 999/2 = 499 + 1/2 1 (lsb) 499/2 = 249 + 1/2 1 249/2 = 124 + 1/2 1 124/2 = 62 + 0/2 0 62/2 = 31 + 0/2 0 31/2 = 15 + 1/2 1 15/2 = 7 + 1/2 1 7/2 = 3 + 1/2 1 3/2 = 1 + 1/2 1 1/2 = 0 + 1/2 1 (msb) Saadaan 99910 = 11111001112 Pilkkua lähinnä oleva bitti saadaan ensin ? 1 102
Muunnos 10-järj:stä 2-järjestelmään, desimaaliosa Muunnettava luku on 999,57812510 Muunnetaan desimaaliosa: Kertolaskut Tulokset Kokonaisosat 2 · 0,578125 = 1 + 0,15625 1 (msb) 2 · 0,15625 = 0 + 0,3125 0 2 · 0,3125 = 0 + 0,625 0 2 · 0,625 = 1 + 0,25 1 2 · 0,25 = 0 + 0,5 0 2 · 0,5 = 1 + 0 1 (lsb) Saadaan 0,57812510 = 0,1001012 Yhdistetään muunnostulokset: 999,57812510 = 1111100111,1001012 Lisätään nollat, alkuun 12 ja loppuun neljä: 1111100111,1001012 = 0000000000001111100111,10010100002 Pilkkua lähinnä oleva bitti saadaan ensin ? 2 102
Muunnos 10-järj:stä 2-järj., päättymätön desimaaliosa Desimaaliosan muunnos ei yleensä pääty Pyöristetään niin, että saatu muunnostulos mahtuu käytettävissä olevaan bittimäärään Esimerkki: Muunna 0,310 kaksijärjestelmään. Luvussa on 4 + 4 bittiä. Kertolaskut Tulokset Kokonaisosat 2 · 0,3 = 0 + 0,6 0 (msb) 2 · 0,6 = 1 + 0,2 1 2 · 0,2 = 0 + 0,4 0 2 · 0,4 = 0 + 0,8 0 2 · 0,8 = 1 + 0,6 1 2 · 0,6 = 1 + 0,2 1 … Pyöristetään ja saadaan siis: 0,310 = 0,01012 = 0000,01012 ? 3 102 Esittele muunnos- laskin
Muista järjestys: täydennys, yhdistäminen Muunnos kymmenjärjestelmän luvusta kahden komplementtimuotoiseksi luvuksi Luvun suuruusosa muunnetaan binaariluvuksi Täydennetään tarvittaessa käytettävään sananpituuteen kokonaisosa: lisätään nollia alkuun murto-osa: lisätään nollia loppuun Jos luku on positiivinen merkkibitiksi 0 suuruusosa sellaisenaan merkkibitin perään Jos luku on negatiivinen merkkibitiksi 1 suuruusosan kahden komplementti merkkibitin perään 102’s Muista järjestys: täydennys, yhdistäminen
Muunnos kymmenjärjestelmän luvusta kahden komplementtimuotoiseksi luvuksi, esimerkki Esimerkki: Muunna kymmenjärjestelmän luku -113,62510 kahden komplementtimuotoiseksi binaariluvuksi. Sananpituus on 16 bittiä, joista kokonaisosaan käytetään 10 bittiä. Muunnetaan kokonaisosa 113 jatkuvan kahdella jakamisen algoritmilla binaariluvuksi. Saadaan 11310 = 11100012 Muunnetaan murto-osa 0,625 jatkuvan kahdella kertomisen algoritmilla binaariluvuksi. Saadaan 0,62510 = 0,1012 Yhdistetään tulokset suuruusosaksi: 113,62510 = 1110001,1012 Täydennetään: kokonaisosa 10 bittiä, murto-osa 16 - 1 - 10 bittiä = 5 bittiä 1110001,1012 = 0001110001,101002 Luku on negatiivinen merkkibitiksi 1 suuruusosan kahden komplementti merkkibitin perään -113,62510 = 11110001110,011002 (kahden komplementtimuoto) ? 4 102’s
Muunnos kahden komplementtimuotoisesta luvusta kymmenjärjestelmän luvuksi Muunnetaan etumerkki-itseisarvoesitykseen Muunnetaan suuruusosa kymmenjärjestelmän luvuksi määritelmän mukaan summakaavalla B = Bn · 2n + Bn -1 · 2n -1 + … + B2 · 22 + B1 · 21 + B0 · 20 + B-1 · 2-1 + B-2 · 2-2 + B-3 · 2-3 + … + B-m · 2-m Etumerkki määräytyy merkkibitin mukaan: 0 +, 1 - Toinen tapa: käytetään suoraan summakaavaa, mutta otetaan merkkibitti mukaan miinusmerkkisenä B = -Bn +1 · 2n+1 + Bn · 2n + Bn -1 · 2n -1 + … + B2 · 22 + B1 · 21 + B0 · 20 + B-1 · 2-1 + B-2 · 2-2 + B-3 · 2-3 + … + B-m · 2-m 210
Muunnos kahden komplementtimuotoisesta luvusta kymmenjärjestelmän luvuksi, esimerkkejä Esimerkki: Muunna kahden komplementtimuotoiset binaariluvut A = 01100011 ja B = 10110100 kymmenjärjestelmään. A = 011000112 (positiivinen, suora muunnos summakaavalla) = + (1 · 26 + 1 · 25 + 0 · 24 + 0 · 23 + 0 · 22 + 1 · 21 + 1 · 20 ) = + (64 + 32 + 2 + 1) = +9910 ? 5 B = 101101002 (negatiivinen, kahden komplementtimuotoinen) = 110011002 (negatiivinen, etumerkki-itseisarvomuotoinen) = - (1 · 26 + 0 · 25 + 0 · 24 + 1 · 23 + 1 · 22 + 0 · 21 + 0 · 20 ) = - (64 + 8 + 4) = -7610 B:n suora muunnos: B = 101101002 (negatiivinen, kahden komplementtimuotoinen) = -1 · 27 + 0 · 26 + 1 · 25 + 1 · 24 + 0 · 23 + 1 · 22 + 0 · 21 + 0 · 20 = -128 + 32 + 16 + 4 = -7610
Muunnokset 2-, 8- ja 16-järjestelmien välillä Koska 8 = 23 ja 16 = 24, muunnokset ovat helppoja ja tehdään bittejä ryhmittelemällä ja muuntamalla kukin ryhmä erikseen Tarvittaessa etumerkittömän binaariluvun alkuun lisätään nollia ja kahden komplementtimuotoisen luvun alkuun merkkibittejä Esimerkki: Muunna 16-bittinen etumerkitön binaariluku 1011100100001010 oktaaliluvuksi ja heksadesimaaliluvuksi Oktaaliluvuksi: 0012201122100221002200122010 010000300004000040000100002 Heksaluvuksi: 1011221001220000221010 0 B0000- 900 00 00000 A Muunnokset oktaali- ja heksadesimaalilukujen välillä tehdään binaarilukujen kautta 8 2 16 ja 16 2 8 ? 6 28 Lisätään nollat 216
Yhteenveto Digitaalitekniikassa tarvitaan lukujärjestelmämuunnoksia, koska ihmiset ovat tottuneet kymmenjärjestelmään ja tietokoneet laskevat parhaiten binaariluvuilla Muunnos muusta järjestelmästä kymmenjärjestelmään tehdään käyttämällä summakaavaa Muunnos kymmenjärjestelmästä muuhun järjestelmään tehdään kahdella jakamisen algoritmilla (kokonaisosa) ja kahdella kertomisen algoritmilla (murto-osa) Murto-osan muunnos voi olla päättymätön jolloin lopputulos pyöristetään Muunnos kymmenjärjestelmän luvusta kahden komplementtimuotoiseksi luvuksi on kolmivaiheinen Muunnos kahden komplementtimuotoisesta luvusta kymmenjärjestelmän luvuksi voidaan tehdä joko kaksivaiheisena tai suorana muunnoksena Muunnokset binaariluvuista oktaali- ja heksadesimaaliluvuiksi ja kääntäen tehdään bittejä ryhmittelemällä