Lukujärjestelmät ja lukujen esittäminen HTOL Digitaalitekniikan perusteet Luku 8 Sivu 1 (43) 1998-1999 Luentokalvoseloste 12.6.1998 Fe Lukujärjestelmät ja lukujen esittäminen 1997D msb Decimal 8AFFH 2:n komplementti lsb Binary ANSI/IEEE Std 754-2008 1 1 1 B = Bi · 2i Hex 1100111001100101B Octal
Johdanto Tässä luvussa esitellään kaksi- eli binaarilukujärjestelmä sekä kahdeksan- ja kuusitoistajärjestelmät esitetään etumerkittömien ja etumerkillä varustettujen lukujen esitys digitaalilaitteissa esitetään kokonais- ja kiinteän pilkun binaarilukujen esitys digitaalilaitteissa käsitellään binaarilukujen esitysmuodot, erityisesti kahden komplementtiesitys esitetään luvun muunnos etumerkki-itseisarvoesityksestä kahden komplementtiesitykseen ja kääntäen esitetään kahden komplementtimuotoisen luvun sananpituuden muuttaminen esitetään liukuvan pilkun lukujen esitys digitaalilaitteissa Luvun tavoitteena on oppia tuntemaan digitaalitekniikassa yleisesti käytettävät lukujärjestelmät ja lukujen esitystavat ja -muodot
Lukujärjestelmät Kymmen- eli desimaalijärjestelmä: kantaluku 10 perinteisesti käytetty ja tuttu numerot 0, 1, 2, 3, 4, 5, 6, 7, 8 ja 9 10 2 Kaksi- eli binaarijärjestelmä: kantaluku 2 numerot 0 ja 1 luvut ovat pitkiä numeroita nimitetään biteiksi (binary digit) soveltuu hyvin digitaalilaitteisiin asetetaan loogisen signaalin arvot 0 ja 1 vastaamaan bitin arvoja 0 ja 1 8 Kahdeksan- eli oktaalijärjestelmä: kantaluku 8 numerot 0, 1, 2, 3, 4, 5, 6 ja 7 16 Kuusitoista- eli heksadesimaalijärjestelmä: kantaluku 16 yleisessä käytössä digitaalisuunnittelussa ja ohjelmoinnissa kaksijärjestelmää havainnollisempi, luvut ovat lyhyitä numerot 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E ja F
Kantaluvun esittäminen ja lukutyypit Kantaluvun (base, radix) esittäminen: alaindeksillä luvun perässä: esimerkiksi 101012, 1758, 9410, F5C16 kirjaimella luvun perässä: esimerkiksi 10101B, 175Q, 94D, F5CH etuliitteellä: esimerkiksi C-kielessä 0175 = 1758, 94 = 9410, 0xF5C = F5C16 ? 1 unsigned signed Lukutyypit: etumerkittömät luvut (unsigned numbers) kaikki luvut samanmerkkisiä (yleensä positiivisia) etumerkkiä ei merkitä etumerkillä varustetut luvut (signed numbers) sekä positiivisia että negatiivisia lukuja etumerkki merkittävä näkyviin
Etumerkittömien lukujen esittäminen ja tulkinta Numero Kokonais- ja murto-osan erotin (pilkku tai piste) An Esitystapa: An An -1 … A2 A1 A0 , A-1 A-2 A-3 … A-m An·k n Kantaluku Tulkinta: A = An·k n + An -1·k n -1 + … + A2·k 2 + A1·k 1 + A0·k 0 + A-1·k -1 + A-2·k -2 + A-3 ·k -3 + … + A-m ·k -m ? 2 Esimerkkejä: 724,510 = 7·102 + 2·101 + 4·100 + 5·10-1 10101,01B = 1·24 + 0·23 + 1·22 + 0·21 + 1·20 + 0·2-1 + 1·2-2 = 21,2510 0724,5 = 7·82 + 2·81 + 4·80 + 5·8-1 = 468,62510 0xA50BF6 = A·165 + 5·164 + 0·163 + B·162 + F·161 + 6·160 = 1081650210
Etumerkittömiä kokonaislukuja eri järjestelmissä Heksadesimaali Desimaali Oktaali Binaari 16 1 1 1 1 2 2 2 10 3 3 3 11 10 4 4 4 100 5 5 5 101 6 6 6 110 7 7 7 111 8 8 8 10 1000 9 9 11 1001 A 10 12 1010 B 11 13 1011 2 C 12 14 1100 D 13 15 1101 E 14 16 1110 F 15 17 1111
Lukujen esitys digitaalilaitteissa Kaikki luvut esitetään numeroiden 0 ja 1 avulla Binaariluvuille tämä on helppoa, tarvitaan vain 0 ja 1 Muiden järjestelmien luvuille käytetään koodausta Luvut voivat olla kokonaislukuja (integer) kiinteän pilkun (fixed point) lukuja liukuvan pilkun (floating point) lukuja (hyvin suuri lukualue) Toisaalta ne voivat olla etumerkittömiä etumerkillä varustettuja Lukujen arvoja pidetään rekistereissä Luvun esittämiseen on käytettävissä tietty vakiomäärä tai sen monikerta bittejä, esim. 8, (12), 16, 32, 64 tai jopa 128 Em. bittimäärä = sananpituus (word length) Tavu (byte, B) = 8 bittiä 1 Esim. 1001 = 910 tavu = 8 bittiä
Etumerkittömät binaarikokonaisluvut 1 Esimerkki: Kahdeksanbittinen etumerkitön kokonaisluku msb lsb Esitystapa: Bn Bn -1 Bn -2 … B2 B1 B0 Eniten merkitsevä bitti (most significant bit) msb Vähiten merkitsevä bitti (least significant bit) lsb 2 Tulkinta: B = Bn · 2n + Bn -1 · 2n -1 + Bn -2 · 2n -2 + … + B2 · 22 + B1 · 21 + B0 · 20 Esimerkkejä: Sananpituus on 8 bittiä. Esitä etumerkittömät kokonaisluvut 0, 1, 100,101010, 1111111 ja 11110000 0 00000000, 1 00000001, 100 00000100, 101010 00101010, 1111111 01111111, 11110000 11110000 (ei muutu) ? 3
Etumerkillä varustetut binaarikokonaisluvut Merkkibitti (sign bit) ilmoittaa luvun etumerkin, yleensä 0 = + ja 1 = - Kahdeksanbittinen positiivinen kokonaisluku 1 Luku = +10110002 = 8810 Merkkibitti msb lsb Suuruus 1 Merkkibitti Luvun arvo riippuu esitysmuodosta msb lsb 16-bittinen negatiivinen kokonaisluku Suuruus
Etumerkittömät kiinteän pilkun binaariluvut Esitystapa: Bn Bn -1 … B2 B1 B0 , B-1 B-2 B-3 … B-m Eniten merkitsevä bitti (msb) Vähiten merkitsevä bitti (lsb) Binaaripilkku 2 Tulkinta: 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 Esimerkkejä: Sananpituus on 16 bittiä ja kokonaisosan pituus 10 bittiä. Esitä etumerkittömät kiinteän pilkun luvut 0,1, 100,10101 ja 11110000,111 0,1 0000000000,100000, 100,10101 0000000100,101010 11110000,111 0011110000,111000 ? 4
Kiinteän pilkun binaarilukujen esitys digitaalilaitteissa Binaaripilkun paikka valitaan tarpeen mukaan etukäteen pysyvästi valinta tehdään tarvittavan lukualueen perusteella binaaripilkun paikkaa ei merkitä mitenkään 1 Binaaripilkun paikka, sama kaikilla luvuilla msb lsb Etumerkitön kiinteän pilkun luku: Kokonaisosa Murto-osa Merkkibitti 1 Binaaripilkun paikka, sama kaikilla luvuilla msb lsb Etumerkillä varustettu kiinteän pilkun luku: Kokonaisosa Murto-osa
Etumerkillä varustettujen binaarilukujen esitysmuodot ± | | Etumerkki-itseisarvoesitys (sign-and-magnitude) tuttu 10-järjestelmästä monimutkaiset yhteen- ja vähennyslaskualgoritmit yksinkertainen kertolaskualgoritmi 1’s Yhden komplementtiesitys (1's complement) harvinainen suhteellisen yksinkertaiset yhteen- ja vähennyslaskualgoritmit ei esitetä tässä opintojaksossa 2’s Kahden komplementtiesitys (2's complement) yleisin esitystapa digitaalilaitteissa erittäin yksinkertaiset yhteen- ja vähennyslaskualgoritmit
Positiivisten ja negatiivisten binaarilukujen esitys Positiivisten lukujen esitys merkkibitti = 0 samanlainen edellä mainituissa esitystavoissa suuruusosa ilmaisee luvun arvon esityksen tulkinta kuten edellä olleissa esimerkeissä + – Negatiivisten lukujen esitys merkkibitti = 1 muutoin erilainen eri esitystavoissa etumerkki-itseisarvoesityksessä suuruusosa on luvun itseisarvo kahden komplementtiesityksessä suuruusosa on luvun itseisarvon kahden komplementti
Kahden komplementin muodostaminen Aloitetaan vähiten merkitsevästä bitistä Jos bitti on = 0, sitä ei muuteta, vaan siirrytään seuraavaan bittiin Ensimmäinen 1-bitti säilytetään vielä ennallaan Loput bitit käännetään eli invertoidaan 2’s Luku 0 1 1 0 1 0 0 2:n kompl. 1 0 0 1 1 0 0 Säilyvät Kääntyvät Esimerkki 1: 0110100 Luku 1 0 0 0 1 1 1 2:n kompl. 0 1 1 1 0 0 1 Säilyy Kääntyvät Esimerkki 2: 1000111 ? 5
Kahden komplementin kahden komplementti Komplementoimalla komplementti saadaan alkuperäinen luku uudelleen Jos tiedetään luvun kahden komplementti, alkuperäinen luku saadaan komplementoimalla se
Muunnokset etumerkki-itseisarvoesityksen ja kahden komplementtiesityksen välillä Positiiviset luvut samoja säilyy ennallaan Negatiiviset luvut erilaisia merkkibitti aina 1 suuruusosa muunnetaan muodostamalla sen kahden komplementti muunnos on samanlainen kumpaankin suuntaan Etumerkki- Kahden itseisarvo komplementti A = 01100011 01100011 B = 10110010 11001110 Positiivinen - säilyy ennallaan Negatiivinen - suuruusosa komplementoidaan Esimerkki: Muunna etumerkki-itseisarvomuotoiset binaariluvut A ja B kahden komplementtimuotoon ja kääntäen ? 6
Binaarilukujen esitys eri esitystavoissa Desimaali- Etumerkki- Kahden luku itseisarvo komplementti + 7 0111 0111 + 6 0110 0110 + 5 0101 0101 + 4 0100 0100 + 3 0011 0011 + 2 0010 0010 + 1 0001 0001 + 0 0000 0000 - 0 1000 - - 1 1001 1111 - 2 1010 1110 - 3 1011 1101 - 4 1100 1100 - 5 1101 1011 - 6 1110 1010 - 7 1111 1001 - 8 - 1000 ± | | 2’s
Binaarilukujen sananpituuden muuttaminen Usein digitaalilaitteissa käytetään useaa eri sananpituutta lukujen esittämiseen, esimerkiksi integer: 32-bittinen kahden komplementtimuotoinen kokonaisluku short: 16-bittinen kahden komplementtimuotoinen kokonaisluku long: 64-bittinen kahden komplementtimuotoinen kokonaisluku Lukuja joudutaan muuttamaan sananpituudesta toiseen Lyhennettäessä luvun pitää mahtua kokonaan lyhyempään sananpituuteen Luvun suuruus ei saa muuttua muunnoksessa Luvun etumerkki ei saa muuttua muunnoksessa 16 32
Kahden komplementtimuotoisten positiivisten lukujen sananpituuden muunnos + Lyhennys poistetaan alusta nollia eli merkkibittejä Pidennys lisätään alkuun nollia eli merkkibittejä 1 Merkkibitti (+5810) Suuruus
Kahden komplementtimuotoisten negatiivisten lukujen sananpituuden muunnos – Lyhennys poistetaan alusta ykkösiä eli merkkibittejä Pidennys lisätään alkuun ykkösiä eli merkkibittejä 1 Merkkibitti (-5810) Suuruus ? 7
Liukuvan pilkun luvut (liukuluvut) , Kiinteän pilkun esityksillä on heikkouksia suppea lukualue kohtuullisilla esityspituuksilla esityspituuden lisääminen yhdellä bitillä vain kaksinkertaistaa lukualueen esityspituuden kasvattaminen kasvattaa myös esitystarkkuutta, mikä usein on tarpeetonta Liukuvan pilkun esityksellä poistetaan nämä heikkoudet käytännössä yleensä riittävän laaja lukualue 32:lla bitillä esityspituuden lisääminen yhdellä bitillä kasvattaa lukualueen toiseen potenssiin Vastaa tekniikassa yleistä tapaa esittää luvut kymmenen potenssien avulla esimerkkejä: 0,54871 · 1026, -7,24685 · 10 -18, -0,10025 · 1036 Liukuvan pilkun luvuilla laskemiseen prosessoreissa on erityinen laskentayksikkö (floating point unit, FPU)
Liukuvan pilkun lukujen esitystapa , Käytettävissä oleva bittimäärä jaetaan kolmeen osaan merkkibitti s (sign bit) eksponentti e (exponent, characteristic) mantissa f (fraction, mantissa, argument) Luvun arvo v saadaan yleensä kaavasta v = (-1)s · 2e-b · 1,f eräissä tapauksissa kaavasta v = (-1)s · 2e-b · 0,f Esimerkki: 32-bittisen liukuluvun esitys Significand 8 bittiä 23 bittiä s e f Eksponentti Mantissa Merkkibitti
Eksponentti ja mantissa Eksponentti e esitetään siirretyssä esitysmuodossa (biased) e:stä vähennetään ennen potenssiin korottamista siirre (bias) b b on likimain e:n suurin mahdollinen arvo jaettuna kahdella lukualue saadaan ulottumaan myös itseisarvoltaan ykköstä pienempiin lukuihin Esimerkki: e:lle on varattu 8 bittiä tällöin emax = 255 b = 127 0 e 255 -126 e - b 127 Mantissa esitetään itseisarvomuodossa eikä käytetä kahden komplementtiesitystä ,
ANSI/IEEE:n liukuvan pilkun lukujen standardi ANSI/IEEE:n standardi 754 ensimmäinen versio vuonna 1985 nykyinen versio 754-2008 Laaja ja yksityiskohtainen Määrittelee esitystavat, muunnokset niiden välillä ja laskutoimitukset Määrittelee erikoislukuarvojen esityksen, esim + ja - Määrittelee poikkeustilanteet (esim. 0/0) ja niissä annettavat tulokset poikkeustilanteen tulos on usein NaN (Not a Number) Versio 2008 sisältää liukuvan pilkun lukujen esityksen sekä binaarilukuina että kymmenjärjestelmän lukuina Laajassa käytössä tietokoneissa ja mikroprosessorien liukuvan pilkun laskentayksiköissä Tavoitteena on, että eri valmistajien prosessorit ja tietokoneet esittävät liukuvan pilkun luvut ja laskevat niillä täsmälleen samalla tavalla ANSI/IEEE Std 754-2008 ,
ANSI/IEEE:n standardin 754-2008 perusesitystavat Seitsemän perusesitystapaa kaksi vain lyhyiden lukujen tallentamiseen kolme binaarimuotoista laskemiseen binary32: 32 bittiä: s + 8 e + 23 f binary64: 64 bittiä: s + 11 e + 52 f binary128: 128 bittiä: s + 15 e + 112 f kaksi desimaalimuotoista laskemiseen (g- ja t-kentät määrittelevät yhdessä eksponentin ja mantissan) decimal64: 64 bittiä: s + 13 g + 50 t decimal128: 128 bittiä s + 17 g + 110 t , binary 32 binary 64 binary 128 Suurin luku 2128 3,4·1038 21024 1,8·10308 216384 1,2·104932 Itseisarvoltaan pienin tarkka luku ( 0) 2-126 1,2·10-38 2-1022 2,2·10-308 2-16382 3,4·10-4932 Esitystarkkuus 24 b 7 10-j. num. 53 b 16 10-j. num. 113 b 34 10-j. num.
Yhteenveto Digitaalitekniikassa käytetään lukujärjestelmiä, joiden kantaluvut ovat 10, 2, 8 ja 16 Kantaluku voidaan esittää joko alaindeksillä, kirjaimella luvun perässä tai etuliitteellä Binaariluvut esitetään digitaalilaitteissa määrämittaisissa rekistereissä kokonais-, kiinteän pilkun tai liukuvan pilkun lukuina etumerkittöminä tai etumerkillä varustettuina lukuina etumerkki-itseisarvo- tai komplementtiesitystä käyttäen Yleisin binaarilukujen esitysmuoto on kahden komplementtiesitys Siinä lukujen yhteen- ja vähennyslasku on erittäin yksinkertainen Muunnos etumerkki-itseisarvoesityksen ja kahden komplementtiesityksen välillä on yksinkertainen Kahden komplementtimuotoisen luvun sananpituutta voidaan muuttaa Liukuvan pilkun esityksellä voidaan esittää hyvin laaja lukualue kohtullisella bittimäärällä, yleisin esitys on ANSI/IEEE-standardiesitys