Sza´ma´bra´zola´s ´es karakterko´dola´s (jegyzet) B´erci Norbert 2014. szeptember 15-16-i o´ra anyaga
Tartalomjegyz´ ek 1. Sz´ amrendszerek 1.1. A sz´ amrendszer alapja ´es a sz´amjegyek 1.2. Alaki- ´es helyi´ert´ek . . . . . . . . . . . 1.3. Eg´esz sz´ amok le´ır´ asa . . . . . . . . . . 1.4. Nem eg´esz sz´ amok le´ır´ asa . . . . . . . ´ alt´ 1.5. Atv´ as sz´ amrendszerek k¨ oz¨ott . . . . 1.6. Feladatok . . . . . . . . . . . . . . . . 1.7. Sz´ amrendszerek pontoss´ aga . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
2. M´ ert´ ekegys´ egek
1 2 2 2 3 3 3 4 4
3. G´ epi sz´ am´ abr´ azol´ as 3.1. Nem negat´ıv eg´esz sz´ amok ´ abr´azol´asa . . . . . . . 3.2. Negat´ıv eg´esz sz´ amok ´ abr´ azol´asa . . . . . . . . . . 3.3. Eg´esz sz´ amok adat´ abr´ azol´ asainak ¨osszehasonl´ıt´asa 3.4. Eg´esz sz´ amok ´ abr´ azol´ asi hat´ arai ´es pontoss´aga . . 3.5. A lebeg˝ opontos sz´ am´ abr´ azol´ as . . . . . . . . . . . . 3.6. Az IEEE 754 lebeg˝ opontos sz´ am´abr´azol´as . . . . . 3.7. Numerikus matematika . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
4 5 5 7 7 9 13 14
4. Karakterek ´ es k´ odol´ asuk 4.1. Karakterek ´es karakterk´eszletek 4.2. Karakterek k´ odol´ asa . . . . . . 4.3. Klasszikus k´ odt´ abl´ ak . . . . . . 4.4. A Unicode . . . . . . . . . . . . 4.5. Sz¨ ovegf´ ajlok . . . . . . . . . . . 4.6. Feladatok . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
15 15 15 15 16 17 17
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
1. Sz´ amrendszerek A sz´ amrendszer [numeral system - nem numeric system!] a sz´am (mint matematikai fogalom) ´ırott form´ aban t¨ ort´en˝ o megjelen´ıt´es´ere alkalmas m´odszer. Ebben a r´eszben a helyi´ert´eken (poz´ıci´on) alapul´ o sz´ amrendszereket t´ argyaljuk. L´eteznek nem poz´ıci´on alapul´o sz´amrendszerek is, ilyenek p´eld´ aul a sorrendis´egen alapul´ o r´ omai sz´amok, de ezekkel a tov´abbiakban nem foglalkozunk. 0 Revision
: 60 (Date : 2014 − 09 − 2011 : 16 : 32 + 0200(Sat, 20Sep2014))
1
1.1. A sz´ amrendszer alapja ´ es a sz´ amjegyek A helyi´ert´eken alapul´ o sz´ amrendszerek k´et legfontosabb param´etere a sz´ amrendszer alapja [base, radix] ´es az egyes poz´ıci´ okba ´ırhat´ o sz´ amjegyek [digit]. Ezek nem f¨ uggetlenek: a sz´amrendszer alapja meghat´ arozza az egyes poz´ıci´ okba ´ırhat´o sz´amjegyek maximum´at: ha a sz´amrendszer A alap´ u, akkor a legkisebb felhaszn´ alhat´ o sz´amjegy a 0, a legnagyobb az A − 1. 1.1.1. p´ elda. A t´ızes sz´ amrendszerben a 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 sz´amjegyek szerepelhetnek, a nyolcas sz´ amrendszerben a 0, 1, 2, 3, 4, 5, 6, 7 sz´amjegyek k¨oz¨ ul v´alaszthatunk, m´ıg a kettesben a 0, 1 a k´et lehets´eges sz´ amjegy. T´ızn´el nagyobb alap´ u sz´ amrendszerek eset´eben a sz´amjegyek halmaz´at 9 ut´an az ABC bet˝ uivel eg´esz´ıtj¨ uk ki. A kis ´es nagybet˝ uk k¨ oz¨ott ´altal´aban nem tesz¨ unk k¨ ul¨onbs´eget, b´ar egyes nagy alap´ u sz´ amrendszerekn´el erre m´egis sz¨ uks´eg lehet. 1.1.2. p´ elda. A tizenhatos sz´ amrendszerben haszn´alhat´o sz´amjegyek”: 0, 1, 2, 3, 4, 5, 6, 7, 8, ” 9, a, b, c, d, e, f (vagy 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F). Ha az a sz¨ ovegk¨ ornyezetb˝ ol nem egy´ertelm˝ u, a sz´amrendszer alapj´at sz¨ogletes z´ar´ojelben a jobb als´ o indexbe t´eve jel¨ olhetj¨ uk. P´eld´ aul: 5221[10] , 726[8] vagy 80[16] . A j´ ol ismert t´ızes alap´ u decim´ alis sz´amrendszeren k´ıv¨ ul az informatik´aban a leggyakrabban haszn´ altak a k¨ ovetkez˝ ok: a kettes alap´ u bin´ aris, a nyolcas alap´ u okt´ alis ´es a tizenhatos alap´ u hexadecim´ alis. Az el˝ oz˝ oekben eml´ıtett, indexben t¨ort´en˝o sz´amrendszer megad´as mellett bin´aris sz´ amrendszer jel¨ ol´es´ere haszn´ alatos a b postfix, okt´alis esetben egy kezd˝o 0 szerepeltet´ese, hexadecim´ alis sz´ amok eset´en a 0x, 0X prefixek vagy a h postfix. Az informatik´aban ezeket a jel¨ ol´eseket haszn´ aljuk a legink´ abb. P´eld´aul: 100b (bin´aris), 065 (okt´alis), 0x243 (hexadecim´alis), 0X331 (hexadecim´ alis), 22h (hexadecim´alis). Ha sem a sz´am el˝ott, sem ut´ana, sem az index´eben nincs jel¨ olve, akkor decim´ alis sz´ amrendszerben ´ertelmezz¨ uk a le´ırtakat.
1.2. Alaki- ´ es helyi´ ert´ ek Egy adott sz´ amrendszerben le´ırt sz´ am eset´eben egy sz´ amjegy ´ert´eke egyenl˝o a sz´amjegy alaki ´ert´ek´enek ´es helyi´ert´ek´enek szorzat´ aval. A sz´amjegy alaki ´ert´eke a sz´amjegyhez tartoz´o ´ert´ek, a helyi´ert´ek pedig a sz´ amrendszer alapj´ anak a poz´ıci´o szerinti hatv´anya. A 0, 1, . . . , 9 eset´eben az alaki ´ert´ek egy´ertelm˝ u, a bet˝ ukkel kieg´esz´ıtett esetben ezek: a=10, b=11, c=12, d=13 stb. 1.2.1. p´ elda. A t´ızes sz´ amrendszerben fel´ırt 32 sz´am eset´eben a 3 helyi´ert´eke 101 = 10, mivel az jobbr´ ol a m´ asodik poz´ıci´ on szerepel (´es a helyi´ert´ekeket a nulladik hatv´anyt´ol ind´ıtjuk), ´ıgy ebben a p´eld´ aban a 3 sz´ amjegy ´ert´eke: 3 · 101 = 3 · 10 = 30. 1.2.2. p´ elda. A t´ızes sz´ amrendszerben fel´ırt 32 sz´am eset´eben a 2 helyi´ert´eke 100 = 1, mivel az jobbr´ ol az els˝ o poz´ıci´ on szerepel (´es a helyi´ert´ekeket a nulladik hatv´anyt´ol ind´ıtjuk), ´ıgy ebben a p´eld´ aban a 2 sz´ amjegy ´ert´eke: 2 · 100 = 2 · 1 = 2.
1.3. Eg´ esz sz´ amok le´ır´ asa Eg´esz sz´ amokat ´ altal´ anos esetben az an an−1 . . . a1 a0 alakban ´ırhatunk fel, ´es az ´ıgy fel´ırt sz´am ´ert´eke (A alap´ u sz´ amrendszert felt´etelezve): (an · An ) + (an−1 · An−1 ) + · · · + (a1 · A1 ) + (a0 · A0 ) ami nem m´ as, mint a le´ırt sz´ amjegyek (az el˝oz˝oekben megismert m´odon kisz´amolt) ´ert´ekeinek osszege. ¨ 1.3.1. p´ elda. Trivi´ alis p´elda: 405[10] = 4 · 102 + 0 · 101 + 5 · 100 = 400 + 5 1.3.2. p´ elda. 405[8] = 4 · 82 + 0 · 81 + 5 · 80 = 256 + 5 = 261 1.3.3. p´ elda. 1001101[2] = 1 · 26 + 0 · 25 + 0 · 24 + 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 = 64 + 8 + 4 + 1 = 77 1.3.4. p´ elda. 0xA3 = 10 · 161 + 3 · 160 = 10 · 16 + 3 · 1 = 163 A negat´ıv eg´esz sz´ amokat u ´gy ´ırjuk le, hogy abszol´ ut ´ert´ek¨ uket az el˝oz˝o m´odon fel´ırjuk valamely sz´ amrendszerben, majd el´e − jelet tesz¨ unk (b´ar ezt a jel¨ol´est a t´ızes sz´amrendszeren k´ıv¨ ul a gyakorlatban nem alkalmazzuk). 2
1.4. Nem eg´ esz sz´ amok le´ır´ asa Az eg´esz sz´ amokn´ al megismert fel´ır´ asi m´odszert kiterjeszthetj¨ uk u ´gy, hogy a helyi´ert´ekek megad´ as´ an´ al nem ´ allunk meg a nulladik hatv´anyn´al, hanem folytatjuk azt a negat´ıv hatv´anyokra ´ is, ´ıgy lehet˝ os´eg¨ unk ad´ odik nem eg´esz sz´amok le´ır´as´ara. Altal´ anos esetben teh´at ennek alakja: an an−1 . . . a1 a0 a−1 . . . a−k , ´es az ´ıgy fel´ırt sz´am ´ert´eke (A alap´ u sz´amrendszert felt´etelezve): an · An + an−1 · An−1 + · · · + a1 · A1 + a0 · A0 + a−1 · A−1 + · · · + a−k · A−k Annak ´erdek´eben, hogy a mindk´et v´eg´en (eg´esz- illetve t¨ort r´esz) tetsz˝olegesen b˝ov´ıthet˝o fel´ır´as egy´ertelm˝ u legyen, ennek a k´et r´esznek a hat´ar´at jel¨olj¨ uk tizedesvessz˝ovel. Mi a magyar helyes´ır´ assal ellent´etben, a nem eg´esz sz´ amok felsorol´as´anak k¨onnyebb olvashat´os´aga ´erdek´eben a tov´ abbiakban a tizedespontos1 jel¨ ol´est fogjuk alkalmazni. (Pl. 1,6, 2,4, 5,9 helyett 1.6, 2.4, 5.9) 1.4.1. p´ elda. Trivi´ alis p´elda: 405.23[10] = 4 · 102 + 0 · 101 + 5 · 100 + 2 · 10−1 + 3 · 10−2 = 1 1 4 · 100 + 5 · 1 + 2 · 10 + 3 · 100 1.4.2. p´ elda. 405.23[8] = 4 · 82 + 0 · 81 + 5 · 80 + 2 · 8−1 + 3 · 8−2 = 4 · 64 + 5 · 1 + 2 · 3 = 261 19 256 + 5 + 28 + 64 64 = 261.296875
1 8
+3·
1 82
=
1.4.3. p´ elda. 1001101.01[2] = 1 · 26 + 0 · 25 + 0 · 24 + 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 + 0 · 2−1 + 1 · 2−2 = 64 + 8 + 4 + 1 + 41 = 77.25 Negat´ıv nem eg´esz sz´ amok le´ır´ asa a negat´ıv eg´esz sz´amok le´ır´as´ahoz hasonl´oan a − jel sz´am el´e ´ır´ as´ aval t¨ ort´enik (amit szint´en csak a t´ızes sz´amrendszer eset´eben haszn´alunk).
´ alt´ 1.5. Atv´ as sz´ amrendszerek k¨ oz¨ ott Az adott sz´ amrendszerb˝ ol t´ızes sz´ amrendszerbe v´alt´ast az 1.3 ´es az 1.4 r´eszek p´eld´aiban hallgat´olagosan m´ ar bemutattuk. A ford´ıtott a´tv´alt´asra nem t´er¨ unk ki (a m´odszer k¨onnyen kital´alhat´o, l´ asd 1.6.5. feladat). Az ´ atv´ alt´ as nagym´ert´ekben egyszer˝ us¨odik, ha bin´arisb´ol okt´alis vagy hexadecim´alis sz´amrendszerbe kell ´ atv´ altani: egyszer˝ uen h´armas´aval (okt´alis esetben) vagy n´egyes´evel (hexadecim´alis esetben) kell a bin´ aris sz´ amjegyeket csoportos´ıtani, ´es az ´ıgy k´epzett csoportokat ´atv´altani: 1.5.1. p´ elda. 1010111001[2] = 001 010 111 001[2] = 1271[8] Az ´ atv´ alt´ as ford´ıtott ir´ anyban is hasonl´oan egyszer˝ u: az egyes okt´alis vagy hexadecim´alis sz´amjegyeket kell ´ atv´ altani ´es az ´ıgy kapott h´armas illetve n´egyes bin´aris csoportokat egym´as ut´an ´ırni: 1.5.2. p´ elda. 2b9[16] = 0010 1011 1001[2] = 1010111001[2] Okt´ alisb´ ol hexadecim´ alisba vagy decim´alisb´ol hexadecim´alisba illetve ford´ıtva a bin´aris sz´amrendszert k¨ ozbeiktatva is ´ atv´ althatunk ezzel a m´odszerrel: 1.5.3. p´ elda. 2b9[16] = 0010 1011 1001[2] = 1010111001[2] = 001 010 111 001[2] = 1271[8]
1.6. Feladatok 1.6.1. feladat. 1010111001[2] = ?[8] = ?[16] 1.6.2. feladat. 54[8] = ?[16] 1.6.3. feladat. 962[10] = ?[8] = ?[16] 1.6.4. feladat. 9a2d[16] = ?[2] = ?[8] = ?[16] 1 Ha nagyon pontosak akarunk lenni, akkor tizedespontr´ ol csak a t´ızes sz´ amrendszer haszn´ alata eset´ en besz´ elhetn´ enk, bin´ aris esetben ink´ abb bin´ aris pontr´ ol van sz´ o (´ es hasonl´ oan okt´ alis, hexadecim´ alis stb. esetben).
3
1.6.5. feladat. Adjunk algoritmust (m´odszert) decim´alisb´ol a) okt´alis-, b) hexadecim´alis sz´amrendszerbe t¨ ort´en˝ o k¨ ozvetlen (teh´ at nem a bin´aris sz´amrendszer k¨ozbeiktat´as´aval t¨ort´en˝o) ´atv´alt´ asra! 1.6.6. feladat. Minden racion´ alis sz´ am (t¨ort) le´ırhat´o b´armilyen alap´ u sz´amrendszerben v´eges sz´ amjegy felhaszn´ al´ as´ aval? A http://www.exploringbinary.com/binary-converter/ oldalon kipr´ob´alhat´ok, ellen˝orizhet˝ok az atv´ ´ alt´ asok.
1.7. Sz´ amrendszerek pontoss´ aga Fontos kiemelni, hogy nem eg´esz sz´ amok fel´ır´asa eset´en nem biztos, hogy a sz´am pontosan le´ırhat´ o v´eges sz´ amjeggyel! S˝ ot, egy konkr´et nem eg´esz sz´am ´abr´azol´as´anak pontoss´aga f¨ ugg a sz´ amrendszer alapj´ at´ ol: p´eld´ aul az 13 t´ızes sz´amrendszerben nem ´ırhat´o fel v´eges sz´amjeggyel, ugyanakkor h´ armas sz´ amrendszerben pontosan fel´ırhat´o: 13 = 0.1[3] = 0.33333 . . .[10] 1.7.1. feladat. Adjunk meg n´eh´ any p´eld´at arra, amikor az egyik sz´amrendszerben v´eges sz´amjeggyel fel´ırhat´ o sz´ am a m´ asik sz´ amrendszerben nem ´ırhat´o fel v´eges sz´amjeggyel! 1.7.2. feladat. a) Adjunk meg n´eh´ any p´eld´at olyan sz´amra, ami egyetlen sz´amrendszerben sem ´ırhat´ o fel v´eges sz´ amjeggyel! b) Fel´ırhat´ok ezek a sz´amok t¨ort alakban? c) Milyen sz´amhalmazt alkotnak ezek a sz´ amok? 1.7.3. feladat. Kiv´ alaszthat´ o olyan alap´ u sz´amrendszer, amiben minden racion´alis sz´am pontosan ´ abr´ azolhat´ o v´eges hossz´ u karaktersorozattal? Indokoljuk meg!
2. M´ ert´ ekegys´ egek Az informatik´ aban haszn´ alatos legkisebb egys´eg a bit [bit] (sok esetben b-vel r¨ovid´ıtik, de a legfrissebb szabv´ any2 a r¨ ovid´ıt´es n´elk¨ uli form´at aj´anlja, ami k´ezenfekv˝o a sz´amrendszerek r´eszben ´ eke 0 vagy 1 lehet. t´ argyaltak miatt, hiszen a b postfix a bin´aris sz´amrendszert jel¨oli). Ert´ Haszn´ alhatjuk t´ arol´ okapacit´ as vagy inform´aci´omennyis´eg jel¨ol´es´ere. Az ut´obbi egy fels˝obb ´eves t´ argy, az Inform´ aci´ o ´es k´ odelm´elet t´em´aja, mi itt csak a t´arol´asi vonatkoz´as´aval foglalkozunk. A b´ ajt [byte] az informatika m´ asik legfontosabb egys´ege, jele: B. Mi az ´altal´anosan elfogadott, a gyakorlatban majdnem kiz´ ar´ olagosan haszn´alt 1 B = 8 bit ´atv´alt´ast haszn´aljuk, b´ar egyes (egzotikus) architekt´ ur´ ak eset´eben enn´el t¨obb vagy kevesebb bit is alkothat egy b´ajtot. Az SI m´ert´ekegys´egrendszerben haszn´alatos k (kilo), M (mega), G (giga), T (tera), P (peta) stb. prefixek mellett a bit ´es a b´ ajt eset´eben haszn´alatosak a Ki (kibi), Mi (mebi), Gi (gibi), Ti (tebi), Pi (pebi) stb. bin´ aris prefixek is (l´asd az 1. ´abr´an). Fontos kiemelni, hogy az egyre nagyobb prefixek eset´eben egyre nagyobb a k¨ ul¨onbs´eg az SI ´es a bin´ aris prefixek k¨ oz¨ ott. P´eld´ aul a G (10003 ) ´es Gi (10243 ) k¨oz¨ott a k¨ ul¨onbs´eg kb. 7%, a T (10004 ) ´es Ti (10244 ) k¨ oz¨ ott m´ ar kb. 10%.3 A kapcsolat a prefixek ´es a sz´ amrendszerek k¨oz¨ott ott fedezhet˝o fel, hogy a haszn´alt prefixek mindig a sz´ amrendszer alapja valamely hatv´any´anak hatv´anyai. Az SI esetben ez a t´ız harmadik hatv´ anya (illetve ennek tov´ abbi hatv´ anyai), de ugyanez igaz a bin´aris prefixekre is, amikor is ez a kett˝ o tizedik hatv´ anya (illetve ennek tov´abbi hatv´anyai).
3. G´ epi sz´ am´ abr´ azol´ as A g´epi sz´ am´ abr´ azol´ as a sz´ amok (sz´ am´ıt´o)g´epek mem´ori´aj´aban vagy egy´eb egys´eg´eben t¨ort´en˝o t´ arol´ as´ at vagy valamely adath´ al´ ozaton t¨ort´en˝o tov´abb´ıt´as form´atum´at adja meg. 2 ISO/IEC
80000, Part 13 - Information science and technology fontos ez a h´ att´ ert´ arak eset´ eben, ahol a gy´ art´ ok ink´ abb az SI prefixeket haszn´ alj´ ak, mert ´ıgy egy 1000000000000 B m´ eret˝ u lemezegys´ eg eset´ eben 1 TB-ot t¨ untethetnek fel, m´ıg ugyanez a bin´ aris prefixekkel csup´ an 0.9 TiB 3 K¨ ul¨ on¨ osen
4
SI prefix k (kilo) M (mega) G (giga) T (tera) P (peta)
bin´aris prefix szorz´o Ki (kibi) 1024 Mi (mebi) 10242 Gi (gibi) 10243 Ti (tebi) 10244 Pi (pebi) 10245
szorz´o 1000 10002 10003 10004 10005
1. ´ abra. SI ´es bin´aris prefixek
3.1. Nem negat´ıv eg´ esz sz´ amok ´ abr´ azol´ asa Egy nem negat´ıv (el˝ ojel n´elk¨ uli) eg´esz sz´am [unsigned integer] ´abr´azol´asa megegyezik a bin´aris sz´ amrendszern´el megismert le´ır´ assal, azaz egy nem negat´ıv eg´esz sz´amot a kettes sz´amrendszerbe atv´ ´ altott form´ aj´ aban t´ arolunk. A t¨om¨orebb ´ır´asm´od miatt ugyanakkor ezt legt¨obbsz¨or nem bin´ aris, hanem hexadecim´ alis form´ aban ´ırjuk le. (Ne feledj¨ uk, hogy a bin´arisb´ol hexadecim´alisba v´ alt´ as nem m´ as, mint n´egy bites´evel csoportos´ıt´as, ahogy azt az el˝oz˝oekben l´athattuk.) A kapott ´ert´ekeket ´ altal´ aban valamilyen fix hosszon t´aroljuk (a nem haszn´alt helyi´ert´ekekre null´ at ´ırunk), ami a gyakorlatban kiz´ ar´olag eg´esz byte m´eret˝ u ´abr´azol´ast jelent. ´Igy az el˝ojel n´elk¨ uli eg´eszek is legt¨ obbsz¨ or 1, 2, 4, 8, . . . byte (8, 16, 32, 64, . . . bit) hossz´ uak lehetnek. ´Igy is h´ıvjuk ezeket: 8 bites el˝ ojel n´elk¨ uli eg´esz, 16 bites el˝ojel n´elk¨ uli eg´esz stb. 3.1.1. p´ elda. A 46[10] sz´ amot a mem´ori´aban a k¨ovetkez˝ok´eppen t´aroljuk 1 b´ajton: 00101110 (=0x2E). 3.1.2. feladat. Az ¨ osszead´ as m˝ uvelet hogyan v´egezhet˝o el az el˝ojel n´elk¨ uli eg´esz sz´amok bin´aris t´ arol´ asa eset´en? Adjunk erre m´ odszert (algoritmust)! 3.1.3. feladat. Hogyan d¨ onthet˝ o el k´et el˝ojel n´elk¨ uli eg´esz sz´amr´ol, hogy melyik a nagyobb? Adjunk r´ a algoritmust!
3.2. Negat´ıv eg´ esz sz´ amok ´ abr´ azol´ asa Ebben a r´eszben a negat´ıv eg´eszek ´ abr´azol´as´anak v´altozatait tekintj¨ uk ´at. 3.2.1. El˝ ojelbites ´ abr´ azol´ as A legegyszer˝ ubb m´ odszer az el˝ ojeles eg´eszek ´abr´azol´as´ara, ha az el˝ojel n´elk¨ uli eg´eszek ´abr´azol´as´ ahoz egy el˝ ojelet jelent˝ o bitet adunk (ami 0, ha pozit´ıv az el˝ojel ´es 1, ha negat´ıv az el˝ojel) ´es az abr´ ´ azol´ asb´ ol fennmarad´ o t¨ obbi biten t´aroljuk a sz´am abszol´ ut ´ert´ek´et az el˝oz˝oekben t´argyaltak szerint. 3.2.1. p´ elda. A −32 el˝ ojelbites ´ abr´ azol´asa 8 biten (1 bit el˝ojel + 7 bit ´ert´ek): 10100000 3.2.2. p´ elda. A 18 el˝ ojelbites ´ abr´ azol´asa 8 biten (1 bit el˝ojel + 7 bit ´ert´ek): 00010010 Ez a megold´ as sok szempontb´ ol nem megfelel˝o: a legk´ezenfekv˝obb probl´ema, hogy ezzel a m´odszerrel lehets´eges a +0 ´es a −0 ´ abr´ azol´asa is (8 biten ezek a k¨ovetkez˝ok: +0 = 00000000, -0 = 10000000), ami zavarhoz vezet (p´eld´aul a nulla-e” vizsg´alatot ´ıgy k´et k¨ ul¨onb¨oz˝o ´ert´ekre kell ” megtenni), tov´ abb´ a az ilyen m´ odon fel´ırt sz´amokkal v´egzett m˝ uveletek bonyolultabbak, mint amennyire az felt´etlen¨ ul sz¨ uks´eges lenne. 3.2.3. feladat. A 3.1.2. feladatban kital´alt ¨osszead´as m˝ uvelet elv´egezhet˝o-e m´ odos´ıt´ as n´elk¨ ul az el˝ ojelbites sz´ am´ abr´ azol´ asi m´ odszer haszn´alat´aval? Adjunk meg egy p´eld´at! 3.2.4. feladat. M´ odos´ıtsuk a 3.1.3. feladatban kital´alt algoritmust, hogy az k´et el˝ojeles sz´am k¨ oz¨ ul is ki tudja v´ alasztani a nagyobbikat!
5
3.2.2. Kettes komplemens ´ abr´ azol´ as Sokkal jobb eredm´enyre vezet a kettes komplemens ´abr´azol´as: ahelyett, hogy egy el˝ojelbittel jel¨oln´enk az el˝ ojelet, a k¨ ovetkez˝ o m´ odon j´ arunk el: a negat´ıv sz´amhoz egyet hozz´aadunk, az eredm´eny abszol´ ut ´ert´ek´et bin´ arisan ´ abr´ azoljuk a megadott sz´am´ u biten (az el˝oz˝oekben t´argyaltak szerint, mivel ez nem negat´ıv), v´eg¨ ul az ´ıgy kapott sz´amjegyeket invert´aljuk. Ebb˝ol a sz´am´ıt´asi m´odb´ol k¨ ovetkezik az ´ abr´ azol´ as neve: kettes komplemens. A kettes komplemens sz´ am´ abr´ azol´ asi m´odszert el˝ ojeles eg´esz [signed integer] sz´am´abr´azol´asnak nevezz¨ uk. 3.2.5. p´ elda. A −2 kettes komplemens ´abr´azol´asa 8 biten: −2 + 1 = −1 ennek abszol´ ut ´ert´eke: 1, ´ abr´ azolva: 00000001, invert´ alva: 11111110. 3.2.6. p´ elda. A −19 kettes komplemens ´abr´azol´asa 8 biten: −19 + 1 = −18 ennek abszol´ ut ´ert´eke: 18, ´ abr´ azolva: 00010010, invert´alva: 11101101. Fontos tudnival´ ok: • Kettes komplemens ´ abr´ azol´ asban is lehets´eges nem negat´ıv sz´amok ´abr´azol´asa, aminek m´ odja megegyezik az el˝ ojel n´elk¨ uli eg´eszek t´arol´asi m´odj´aval. (Azaz ebben az esetben nem kell az el˝ oz˝ oekben ismertetett m˝ uveleteket elv´egezni.) • A kettes komplemens ´ abr´ azol´ asban m´ar csak egyetlen ´abr´azol´asi m´odja van a null´anak. • Az esetek t´ ulnyom´ o t¨ obbs´eg´eben a g´epi sz´am´abr´azol´as sor´an az el˝ojeles eg´eszek ´abr´azol´as´ara a kettes komplemens ´ abr´ azol´ ast haszn´aljuk. 3.2.7. feladat. Adjuk meg a 0 kettes komplemens ´abr´azol´as´at 8, 16, 32, 64 biten! 3.2.8. feladat. Adjuk meg a −1 kettes komplemens ´abr´azol´as´at 8, 16, 32, 64 biten! 3.2.9. feladat. Adjuk meg az 1 kettes komplemens ´abr´azol´as´at 8 biten! 3.2.10. feladat. A 3.1.2. feladatban kital´alt ¨osszead´as m˝ uvelet elv´egezhet˝o-e m´ odos´ıt´ as n´elk¨ ul a kettes komplemens sz´ am´ abr´ azol´ asi m´ odszer haszn´alat´aval? Adjuk ¨ossze az el˝oz˝o k´et feladatban kisz´ amolt, 8 bites −1 ´es 1 ´ert´eket, ´es ellen˝orizz¨ uk, hogy null´at kaptunk-e! 3.2.11. feladat. K´et, kettes komplemens m´odon ´abr´azolt sz´amr´ol hogyan d¨onthet˝o el, hogy melyik a nagyobb? Alkalmazhat´ o m´ odos´ıt´ as n´elk¨ ul ugyanaz az algoritmus, mint a 3.1.3 feladatban? 3.2.3. Eltolt ´ abr´ azol´ as Soroljuk fel egy list´ aban az n biten t¨ort´en˝o el˝ojel n´elk¨ uli sz´am´abr´azol´assal fel´ırhat´o ´ert´ekeket n¨ ovekv˝ o sorrendben. Az eltolt [excess] sz´am´abr´azol´asi m´odszer ezeket az eltol´as m´ert´ek´eben lefel´e tolja u ´gy, hogy az u ´jonnan bel´ep˝ o elemek az ´ert´ek szerint cs¨okken˝o negat´ıv sz´amok legyenek (l´asd 2. ´ abra). 3.2.12. feladat. L´etezik olyan excess ´abr´azol´as, ami a negat´ıv sz´amok eset´eben megegyezik a kettes komplemens ´ abr´ azol´ assal? A lista eltol´ asa helyett az ´ abr´ azoland´o ´ert´ekeket u ´gy is megkaphatjuk, hogy az ´abr´azoland´o sz´ amhoz hozz´ aadjuk az eltol´ as m´ert´ek´et, ´es az eredm´eny¨ ul kapott sz´amot ´abr´azoljuk az el˝ojel n´elk¨ uli eg´esz sz´ am´ abr´ azol´ asi m´ odszere szerint. 3.2.13. feladat. Mi biztos´ıtja, hogy az el˝oz˝o m´odszer m˝ uk¨odik? (Mi garant´alja, hogy nem negat´ıv sz´ amot kapunk, ha az ´ abr´ azoland´o sz´amhoz hozz´aadjuk az eltol´as m´ert´ek´et?) Ha m´egsem m˝ uk¨ odik, az mit jelent? 3.2.14. p´ elda. A −2 excess-2 ´ abr´ azol´asa 3 biten: −2 + 2 = 0, teh´at ´abr´azoland´o a 0 a nem negat´ıv eg´eszek ´ abr´ azol´ asa szerint: 000 (l´asd 2. ´abra els˝o sora). 3.2.15. p´ elda. A −3 excess-4 ´ abr´ azol´asa 3 biten: −3 + 4 = 1, teh´at ´abr´azoland´o az 1 a nem negat´ıv eg´eszek ´ abr´ azol´ asa szerint: 001 (l´asd 2. ´abra m´asodik sora). 3.2.16. p´ elda. Az 5 excess-2 ´ abr´ azol´ asa 3 biten: 5 + 2 = 7, teh´at ´abr´azoland´o a 7 a nem negat´ıv eg´eszek a´br´ azol´ asa szerint: 111 (l´ asd 2. ´abra utols´o sora). 6
t´ arolt adat 3 biten 000 001 010 011 100 101 110 111
adat ´ertelmez´ese el˝ ojel n´elk¨ uli eg´esz excess-2 0 −2 1 −1 2 0 3 1 4 2 5 3 6 4 7 5
excess-4 −4 −3 −2 −1 0 1 2 3
2. ´ abra. A 3 biten t´arolhat´o ´ert´ekek el˝ojel n´elk¨ uli eg´esz ´es excess-2 illetve excess-4 szerinti ´ertelmez´ese
3.3. Eg´ esz sz´ amok adat´ abr´ azol´ asainak ¨ osszehasonl´ıt´ asa 3.3.1. feladat. Hasonl´ıtsuk ¨ ossze az el˝oz˝oekben ismertetett, negat´ıv sz´amok ´abr´azol´as´ara is alkalmas m´ odszereket az al´ abbi szempontok alapj´an: • Az o as m˝ uvelet elv´egezhet˝ o ugyan´ ugy, mint a nem negat´ıv eg´eszek ´abr´azol´as´an´al? ¨sszead´ • K´et ´ abr´ azolt sz´ am eset´eben a kisebb/nagyobb eld¨ont´ese (rendez´es) elv´egezhet˝o ugyan´ ugy, mint a nem negat´ıv eg´eszekn´el? • H´ anyf´elek´eppen ´ abr´ azolhat´ o a nulla? • Hogyan v´egezhet˝ o el az invert´ al´ as (diszkr´et matematikai nyelven az addit´ıv inverz sz´am´ıt´ asa)? • Hogyan v´egezhet˝ o el a kivon´ as m˝ uvelet? 3.3.2. feladat. Hasonl´ıtsuk ¨ ossze a 8 bites sz´am´abr´azol´asok eset´en az el˝ojel n´elk¨ uli eg´esz, az el˝ ojelbites eg´esz, a kettes komplemens, a 127-tel eltolt, a 255-tel eltolt ´es a 256-tal eltolt sz´amabr´ ´ azol´ asokat! (T´ abl´ azatosan foglaljuk ¨ossze: egy sor legyen a t´arolt 8 bit, az oszlopok legyenek a vizsg´ alt ´ abr´ azol´ asi m´ odok, egy adott mez˝obe ´ırjuk be a mez˝o sor´anak megfelel˝o bitsorozat ´ertelmez´es´et az oszlopnak megfelel˝ o sz´ am´abr´azol´as eset´eben, hasonl´oan a 2. ´abr´ahoz!)
3.4. Eg´ esz sz´ amok ´ abr´ azol´ asi hat´ arai ´ es pontoss´ aga 3.4.1. El˝ ojel n´ elku esz t´ arol´ as ´ abr´ azol´ asi hat´ arai ´ es pontoss´ aga ¨ li eg´ Az N biten t¨ ort´en˝ o, el˝ ojel n´elk¨ uli eg´esz sz´am´abr´azol´as eset´en a t´arolhat´o legkisebb ´ert´ek: 0, a t´ arolhat´ o legnagyobb ´ert´ek: 2N − 1. El˝ ojel n´elk¨ uli eg´esz sz´ am´ abr´ azol´ as eset´eben a t´arol´as pontos, hiszen csak eg´esz sz´amokat kell t´ arolni, ´es a hat´ arokon bel¨ ul minden eg´esz sz´am pontosan t´arolhat´o. Ebb˝ol ad´od´oan az ´abr´azol´asi intervallumot az ´ abr´ azolhat´ o sz´ amok egyenletesen t¨oltik ki (l´asd a 3. ´abr´an).
1 N
0
2 −1 = 31
3. ´ abra. 5 bites el˝ ojel n´elk¨ uli eg´esz sz´am´abr´azol´as eset´en az a ´br´ azol´ asi intervallum ´es az ezen bel¨ ul ´abr´azolhat´o sz´amok. 3.4.1. p´ elda. Ha 8 bites el˝ ojel n´elk¨ uli eg´esz ´abr´azol´ast haszn´alunk, akkor a legkisebb ´abr´azolhat´o sz´ am a 00000000 (´ert´eke 0), a legnagyobb ´abr´azolhat´o sz´am az 11111111 (´ert´eke 255). 7
3.4.2. feladat. Mennyi a legnagyobb t´arolhat´o ´ert´ek 8, 16, 32, 64 bites el˝ojel n´elk¨ uli eg´esz eset´eben? ¨ 3.4.3. feladat. Osszesen h´ any k¨ ul¨ onb¨oz˝o ´ert´ek t´arolhat´o 8, 16, 32, 64 biten, el˝ojel n´elk¨ uli eg´esz sz´ am´ abr´ azol´ as eset´eben? 3.4.2. Kettes komplemens t´ arol´ as ´ abr´ azol´ asi hat´ arai ´ es pontoss´ aga Ha kettes komplemens m´ odon ´ abr´ azolunk egy eg´esz sz´amot ´es ehhez N bit ´all rendelkez´esre, akkor a t´ arolhat´ o legkisebb ´ert´ek: −2N −1 , a t´arolhat´o legnagyobb ´ert´ek: 2N −1 − 1. Kettes komplemens sz´ am´ abr´ azol´ as eset´eben a t´ arol´ as pontos, hiszen csak eg´esz sz´amokat kell t´arolni, ´es a hat´arokon bel¨ ul minden eg´esz sz´ am pontosan t´ arolhat´o. Ebb˝ol ad´od´oan az ´abr´azol´asi intervallumot az abr´ ´ azolhat´ o sz´ amok egyenletesen t¨ oltik ki (l´asd a 4. ´abr´an).
−1 −2
N−1
1 0
= − 16
2
N−1
−1 = 15
4. ´ abra. 5 bites kettes komplemens sz´am´abr´azol´as eset´en az a ´br´ azol´ asi intervallum ´es az ezen bel¨ ul ´abr´azolhat´o sz´amok. 3.4.4. p´ elda. Ha 8 bites kettes komplemens ´abr´azol´ast haszn´alunk, akkor a legkisebb ´abr´azolhat´ o sz´ am az 10000000 (´ert´eke -128), a legnagyobb ´abr´azolhat´o sz´am a 01111111 (´ert´eke 127). 3.4.5. feladat. Kettes komplemens ´ abr´azol´as eset´en mi´ert nem ugyanannyi sz´am t´arolhat´o a pozit´ıv ´es a negat´ıv tartom´ anyban? (Azaz mi´ert nem -127 ´es 127 vagy -128 ´es 128 a k´et hat´ar?) 3.4.6. feladat. Mennyi az ´ert´eke a kettes komplemens ´abr´azol´assal, 8 biten t´arolt 11111111 illetve a 00000000 sz´ amoknak? 3.4.7. feladat. Eld¨ onthet˝ o egyszer˝ uen (r´an´ez´esre) egy kettes komplemens m´odon ´abr´azolt sz´amr´ ol, hogy az negat´ıv vagy pozit´ıv? ¨ 3.4.8. feladat. Osszesen h´ any k¨ ul¨ onb¨ oz˝o ´ert´ek t´arolhat´o 8, 16, 32, 64 biten, kettes komplemens sz´ am´ abr´ azol´ as eset´eben? 3.4.9. feladat. Mi a kapcsolat a 3.4.3. feladat ´es a 3.4.8. feladatban kapott eredm´enyek k¨oz¨ott? 3.4.3. Eltolt t´ arol´ as ´ abr´ azol´ asi hat´ arai ´ es pontoss´ aga Az N biten t¨ ort´en˝ o eltolt-M ´ abr´ azol´ as eset´en a legkisebb ´abr´azolhat´o sz´am a −M , a legnagyobb abr´ ´ azolhat´ o sz´ am a −M + 2N − 1. Eltolt sz´am´abr´azol´as eset´eben a t´arol´as pontos, hiszen csak eg´esz sz´ amokat kell t´ arolni, ´es a hat´ arokon bel¨ ul minden eg´esz sz´am pontosan t´arolhat´o. Ebb˝ol ad´ od´ oan az ´ abr´ azol´ asi intervallumot az ´abr´azolhat´o sz´amok egyenletesen t¨oltik ki (l´asd az 5. abr´ ´ an).
−1 −M = −16
1 0
N
−M+2 −1 = 15
5. ´ abra. 6 bites excess-16 sz´am´abr´azol´as eset´en az ´ abr´ azol´ asi intervallum ´es az ezen bel¨ ul ´abr´azolhat´o sz´amok.
8
3.4.4. T´ ulcsordul´ as Az eg´esz sz´ amok v´eges biten t¨ ort´en˝ o a´br´azol´asa miatt mindig van legkisebb ´es legnagyobb ´abr´ azolhat´ o sz´ am. Amikor m˝ uveletet v´egz¨ unk, elk´epzelhet˝o, hogy a m˝ uvelet eredm´enye m´ar nem abr´ ´ azolhat´ o az operandusokkal megegyez˝o m´eretben. Ezt a jelens´eget t´ ulcsordul´asnak [overflow] nevezz¨ uk. T´ ulcsordul´ as teh´ at lehets´eges pozit´ıv ´es negat´ıv ir´anyban is! Figyelem, az alulcsordul´as (l´ asd a 3.5.5. r´eszt) nem a negat´ıv ir´ anyban t¨ort´en˝o t´ ulcsordul´ast jelenti! K¨onnyebben megjegyezhet˝ o, ha u ´gy tekint¨ unk a t´ ulcsordul´asra, hogy a sz´am abszol´ ut ´ert´eke t´ ul nagy ´es emiatt nem abr´ ´ azolhat´ o. T´ ulcsordul´ as eset´en – megval´ os´ıt´ ast´ol f¨ ugg˝oen – lehets´eges • lev´ ag´ as: a t´ ulcsordult eredm´eny m´eg ´abr´azolhat´o r´esz´et t´aroljuk, a nem ´abr´azolhat´o r´eszt egyszer˝ uen elfelejtj¨ uk”. 4 A legt¨obb architekt´ ura ´ıgy m˝ uk¨odik. ” • szatur´ aci´ o : a t´ ulcsordult eredm´eny helyett a legnagyobb illetve legkisebb ´abr´azolhat´o ´ert´eket t´ aroljuk. 3.4.10. p´ elda. T´ ulcsordul´ as pozit´ıv ir´anyban: ha 8 bites el˝ojel n´elk¨ uli eg´eszekkel dolgozunk, a 156+172=328 ¨ osszeget m´ ar nem tudjuk 8 biten t´arolni (mert a legnagyobb t´arolhat´o ´ert´ek a 255). 3.4.11. p´ elda. T´ ulcsordul´ as negat´ıv ir´anyban: ha 8 bites el˝ojeles eg´eszekkel dolgozunk, a -84+(79)=-163 ¨ osszeget m´ ar nem tudjuk 8 biten t´arolni (mert a legkisebb t´arolhat´o ´ert´ek a -127). 3.4.12. p´ elda. Lev´ ag´ as: ha 8 bites el˝ojel n´elk¨ uli eg´eszekkel dolgozunk, a 156[10] = 10011100[2] ´es a 172[10] = 10101100[2] val´ odi ¨ osszege (328[10] = 101001000[2] ) helyett annak a 8 utols´o bitj´et t´ aroljuk: 01001000. 3.4.13. p´ elda. Szatur´ aci´ o: ha 8 bites el˝ojel n´elk¨ uli eg´eszekkel dolgozunk, a 156[10] = 10011100[2] ´es a 172[10] = 10101100[2] val´ odi ¨ osszege (328[10] = 101001000[2] ) helyett az ´abr´azolhat´o legnagyobb sz´ amot t´ aroljuk: 11111111. 3.4.14. feladat. Mi (volt) az Y2K probl´ema? Mi a kapcsolat a t´ ulcsordul´as ´es az Y2K probl´ema k¨ oz¨ ott?
3.5. A lebeg˝ opontos sz´ am´ abr´ azol´ as Nem eg´esz sz´ amok g´epi ´ abr´ azol´ as´ ara a lebeg˝opontos [floating point] a´br´azol´ast haszn´aljuk: a sz´ amot el˝ osz¨ or ´ atalak´ıtjuk normaliz´ alt alakba, ´es az ´ıgy kapott alak k¨ ul¨onb¨oz˝o r´eszeit k¨ ul¨onk¨ ul¨ on t´ aroljuk. 3.5.1. Normaliz´ alt alak Egy sz´ am normaliz´ alt alakj´ an olyan szorzatra bont´as´at ´ertj¨ uk (l´asd 6. ´abra), ahol a m´asodik tag a sz´ amrendszer alapj´ anak valamely hatv´anya (amit a sz´am nagys´agrendj´enek is nevez¨ unk), az els˝o tag ´ert´eke pedig annyi, hogy a m´ asodik taggal megszorozva az eredeti sz´amot kapjuk. Tov´abbi felt´etel, hogy az els˝ o tag egyetlen nem nulla sz´amjegyet tartalmazzon a tizedespont el˝ott, ami garant´ alja, hogy a normaliz´ alt alakban t¨ort´en˝o fel´ır´as egy´ertelm˝ u legyen. 3.5.1. p´ elda. T´ızes sz´ amrendszerben a 380 normaliz´alt alakja: 3.8 · 102 , a 3.875 normaliz´alt alakja 3.875 · 100 , a 0.00000651 normaliz´alt alakja 6.51 · 10−6 , a −53.75 normaliz´alt alakja: −5.375 · 101 . Az el˝ oz˝ oekben defini´ alt els˝ o tagot a sz´am mantissz´ aj´ anak [mantissa, significand, coefficient], a hatv´ anykitev˝ ot (a nagys´ agrendet) a sz´am karakterisztik´ aj´ anak vagy exponens´enek [exponent] nevezz¨ uk. Negat´ıv sz´ amok t´ arol´ as´ ahoz sz¨ uks´eg van m´eg az el˝ojelre is (l´asd 6. ´abra). A lebeg˝ opontos elnevez´es abb´ ol ad´ odik, hogy az ´abr´azolhat´o sz´amok nem fix helyi´ert´ek˝ u tizedesjegyekkel ker¨ ulnek t´ arol´ asra5 , hanem az exponens alapj´an a mantissza tizedespontja v´altozik ( lebeg”). ” 4 P´ eld´ aul mechanikus g´ az´ or´ an´ al vagy r´ egebbi aut´ ok kilom´ eter sz´ aml´ al´ oj´ an´ al figyelhet˝ o meg ilyen jelens´ eg, mert fix sz´ am´ u helyi´ ert´ eken t¨ ort´ enik a m´ er´ es. A kilom´ eter sz´ aml´ al´ ok tekintet´ eben ezt a tulajdons´ agot kihaszn´ alva tekerik k¨ orbe egyes nepperek az ´ or´ at, hogy a kocsi kevesebbet futottnak t˝ unj¨ on. 5 ezt a m´ odot fixpontos a ´br´ azol´ asnak nevezz¨ uk
9
− 3.775 ⋅101 előjel
mantissza
exponens
6. ´ abra. A −37.75 normaliz´alt alakja t´ızes sz´amrendszerben ´es ennek elemei (bekarik´azva). 3.5.2. feladat. Adjunk arra p´eld´ at, hogy az els˝o tag egyetlen nem nulla sz´amjegyet tartalmaz” zon a tizedespont el˝ ott” felt´etel hi´ any´ aban egy sz´amot t¨obbf´elek´eppen is fel lehet ´ırni normaliz´alt alakban! 3.5.3. feladat. Adjuk meg a nulla normaliz´alt alakj´at! 3.5.2. Bin´ aris normaliz´ alt alak A mantissza Kettes sz´ amrendszerben ´abr´azolva a sz´amot, a normaliz´alt alak tov´abb egyszer˝ us¨ odik, hiszen a mantissza tizedespontja el˝ott mindig 1 ´all ( az els˝o tag egyetlen nem nulla ” sz´ amjegyet tartalmazzon a tizedespont el˝ott” felt´etel miatt), amit ´ıgy nem kell elt´arolni (l´asd 7. abra), ´es ezt a megtakar´ıtott bitet a mantissza pontosabb t´arol´as´ara lehet ford´ıtani. ´ Fontos, hogy a lebeg˝ opontos sz´ am ´ertelmez´esekor ezt az el nem t´arolt sz´amjegyet is figyelembe vegy¨ uk, tov´ abb´ a, hogy az els˝ o (nem t´ arolt) egyes ut´an m´ar fontosak az azt k¨ovet˝o null´ak, azaz p´eld´ aul a 0010111 mantissza helyett nem t´arolhatjuk el az 10111 ´ert´eket!
−1.0010111[2]⋅2 előjel
mantissza
5
exponens
7. ´ abra. A -37.75 normaliz´alt alakja kettes sz´amrendszerben ´es ennek t´ aroland´ o elemei (bekarik´azva).
Az exponens A normaliz´ al´ asb´ ol ad´od´oan az exponens is lehet pozit´ıv vagy negat´ıv. Ennek t´ arol´ as´ ahoz az eltolt t´ arol´ asi m´ odszert haszn´aljuk. Az el˝ ojel
Az el˝ ojelet 1 biten t´ aroljuk; ha ´ert´eke 1: a sz´am negat´ıv, ha 0: a sz´am pozit´ıv.
3.5.4. p´ elda. A 380[10] = 101111100[2] normaliz´alt alakja 1.011111[2] · 28 , azaz t´aroland´o a 0 el˝ ojelbit, a 011111 mantissza ´es a 8 karakterisztika (a megfelel˝o eltol´assal). 3.5.5. p´ elda. A −3.375[10] = −11.011[2] normaliz´alt alakja −1.1011[2] · 21 , azaz t´aroland´o az 1 el˝ ojelbit, a 1011 mantissza ´es az 1 karakterisztika (a megfelel˝o eltol´assal). 3.5.3. A lebeg˝ opontos sz´ am elemeinek t´ arol´ asi m´ erete Az el˝ ojelet mindig egy biten, a mantissz´at ´es az exponenst megadott sz´am´ u biten t´aroljuk. Ha az el˝ oz˝ oekben kisz´ amolt mantissza vagy exponens m´erete nem egyezik meg a t´arol´asi m´erettel, akkor az exponenst balr´ ol, a mantissz´ at jobbr´ol eg´esz´ıthetj¨ uk ki null´akkal (ha sz¨ uks´eges)! 3.5.6. p´ elda. A mantissza 10 biten, az exponens 5 biten t¨ort´en˝o excess-15 ´abr´azol´asa eset´en a t´ızezer ´ abr´ azol´ asa: 10000 = 10011100010000[2] = 1.001110001[2] · 213 , azaz t´aroland´o a 0 el˝ojel, a 0011100010 mantissza (figyelem, kieg´esz´ıtett¨ uk 10 bites hosszra null´akkal jobbr´ol!) ´es a 13 exponens, ut´ obbi az excess-15 ´ abr´ azol´ as miatt 11100 form´aban. 10
3.5.7. p´ elda. A mantissza 10 biten, az exponens 5 biten t¨ort´en˝o excess-15 ´abr´azol´asa eset´en a −0.078125 ´ abr´ azol´ asa: −0.078125 = −0.000101[2] = −1.01[2] · 2−4 , azaz t´aroland´o az 1 el˝ojel, a 0100000000 mantissza (figyelem, kieg´esz´ıtett¨ uk 10 bites hosszra null´akkal jobbr´ol!) ´es a −4 exponens, ut´ obbi az excess-15 ´ abr´ azol´ as miatt 01011 form´aban (figyelem, kieg´esz´ıtett¨ uk 5 bites hosszra egy null´ aval balr´ ol!). 3.5.8. feladat. A mantissz´ at mi´ert jobbr´ol, az exponenst mi´ert balr´ol eg´esz´ıthetj¨ uk csak ki null´ akkal? 3.5.4. Lebeg˝ opontos sz´ am´ abr´ azol´ as hat´ arai ´ es pontoss´ aga Az el˝ ojeles vagy el˝ ojel n´elk¨ uli eg´esz ´es a lebeg˝opontos sz´am´abr´azol´as eset´eben is csak fix ´ert´ekek t´ arolhat´ ok, de m´ıg ezek az eg´eszek eset´eben pontosan megegyeznek a t´arolni k´ıv´ant eg´esz sz´ amokkal, a lebeg˝ opontos sz´ am´ abr´ azol´as eset´eben ez nincs ´ıgy, mivel b´arhogy v´alasszuk is meg a sz´ am´ abr´ azol´ as hat´ arait, az ezek k¨ oz¨ ott l´ev˝o v´egtelen sok val´os sz´am nyilv´an nem ´abr´azolhat´o v´eges helyen. Ezt u ´gy is ´ertelmezhetj¨ uk, hogy a lebeg˝opontos t´arol´as sor´an k´enyszer˝ u kerek´ıt´es t¨ ort´enik. Mindezek miatt az ´ abr´ azol´ asi hat´arok mellett a pontoss´ag is jellemez egy-egy konkr´et lebeg˝ opontos sz´ am´ abr´ azol´ ast, ami megadja, hogy egy adott sz´am t´arol´asa eset´en a t´arolni k´ıv´ant ´es a t´ arolt sz´ am ´ert´eke legfeljebb milyen t´avol lehet egym´ast´ol. A lebeg˝opontos sz´amok normaliz´ alt alak´ u t´ arol´ as´ ab´ ol k¨ ovetkezik, hogy a pontoss´agot a mantissza t´arol´asi m´erete hat´arozza meg, az ´ abr´ azol´ asi hat´ arok pedig els˝ odlegesen a karakterisztika ´abr´azol´asi m´eret´eb˝ol ad´odnak. Fontos azt is kiemelni, hogy a pontoss´ag az ´abr´azol´asi tartom´anyban abszol´ ut ´ertelemben nem egyenletes, azaz f¨ ugg az ´ abr´ azolni k´ıv´ ant sz´amt´ol (l´asd a 8. ´abra):
−1
1 0
8. ´ abra. Lebeg˝ opontos sz´ am´ abr´azol´as hat´arai ´es a pontosan ´abr´azolhat´o sz´amok (2 bites mantissza, 3 bites exponens excess-4 m´odon t´arolva). 3.5.9. p´ elda. A mantissza 10 biten, az exponens 5 biten t¨ort´en˝o excess-15 ´abr´azol´asa eset´en • a t´ızezern´el nagyobb, pontosan ´ abr´azolhat´o sz´amok k¨oz¨ ul a legkisebb (l´asd a 3.5.6. feladatot a 10000 ´ abr´ azol´ as´ ahoz) a 0011100011 t´arolt mantissz´aj´ u ´es a 11100 t´arolt exponens˝ u sz´am: 1.0011100011[2] · 213 = 1.2216796875 · 8192 = 10008 • a t´ızezern´el kisebb, pontosan ´ abr´azolhat´o sz´amok k¨oz¨ ul a legnagyobb a 0011100001 t´arolt mantissz´ aj´ u ´es a 11100 t´ arolt exponens˝ u sz´am: 1.0011100001[2] ·213 = 1.2197265625·8192 = 9992 Az el˝ oz˝ oekb˝ ol ad´ odik, hogy t´ızezer k¨ or¨ ul a hiba 8 (ami a t´ızezer 0.08%-a). 3.5.10. p´ elda. A mantissza 10 biten, az exponens 5 biten t¨ort´en˝o excess-15 ´abr´azol´asa eset´en • az egy t´ızezredn´el kisebb, pontosan ´abr´azolhat´o sz´amok k¨oz¨ ul a legnagyobb a 1010001101 t´ arolt mantissz´ aj´ u ´es 00001 t´ arolt exponens˝ u sz´am: 1.1010001101 · 2−14 = 1.6376953125 · 0.00006103515625 = 0.00009995698929 • a t´ızezredn´el nagyobb, pontosan ´abr´azolhat´o sz´amok k¨oz¨ ul a legkisebb a 0 el˝ojel˝ u, a 1010001110 t´ arolt mantissz´ aj´ u ´es a 00001 t´arolt exponens˝ u sz´am: 1.1010001110 · 2−14 = 1.638671875 · 0.00006103515625 = 0.000100016593933 Az el˝ oz˝ oekb˝ ol ad´ odik, hogy egy t´ızezred k¨or¨ ul a hiba kevesebb, mint egy t´ızmilliomod (ami az egy t´ızezred 0.1%-a). 3.5.11. feladat. A mantissza 10 biten, az exponens 5 biten t¨ort´en˝o excess-15 ´abr´azol´asa eset´en adjuk meg (az el˝ oz˝ o k´et p´eld´ ahoz hasonl´o m´odon) az ezern´el, a sz´azn´al, a t´ızn´el, az egy tizedn´el, az egy sz´ azadn´ al ´es az egy ezredn´el nagyobb sz´amok k¨oz¨ ul a legkisebb ´abr´azolhat´ot illetve a kisebb sz´ amok k¨ oz¨ ul a legnagyobb ´ abr´ azolhat´ot, ´es sz´am´ıtsuk ki az abszol´ ut, relat´ıv hib´at. Hogyan v´ altozik a relat´ıv hiba az elt´ arolt sz´ am f¨ uggv´eny´eben? 11
A nem pontos t´ arol´ as akkor is l´ athat´o, ha meggondoljuk, hogy a bin´aris normaliz´alt alak fel´ır´ asakor nem minden sz´ amjegy t´ arolhat´o el, ´ıgy azt k´enytelenek vagyunk a t´arol´asi m´eretre cs¨ okkenteni. 3.5.12. p´ elda. A mantissza 10 biten, az exponens 5 biten t¨ort´en˝o excess-15 ´abr´azol´asa eset´en a 10000.125 ´ abr´ azol´ asa (l´ asd a 3.5.6. feladatot a 10000 ´abr´azol´as´ahoz): 10000.125 = 10011100010000.001 = 1.0011100010000001[2] · 213 , azaz t´arolni kellene a 0 el˝ojelet, a 00111000 10000001 mantissz´ at ´es a 13 exponenst, ut´obbi az excess-15 ´abr´azol´as miatt 11100 form´ aban. J´ ol l´ atszik azonban, hogy a mantissza 10 biten t¨ort´en˝o t´arol´asa miatt a 0011100010000001 els˝ o t´ız karaktere t´arolhat´o csak el, ´ıgy k´enyszer˝ u kerek´ıt´es t¨ort´enik: a 10000.125 helyett a 10000 ker¨ ul t´ arol´ asra. (Ezen nem csod´alkozhatunk, hiszen a 3.5.9 p´eld´aban l´ athattuk, hogy 10000 ´es 10008 k¨ oz¨ ott nem t´arolhat´o el m´as sz´am.) 3.5.13. feladat. Mi t¨ ort´enik a lebeg˝ opontos sz´am ´abr´azol´asi hat´araival ill. pontoss´ag´aval, ha a • mantissza m´eret´et 1 bittel n¨ ovelem? • exponens m´eret´et 1 bittel n¨ ovelem? 3.5.5. Alulcsordul´ as A t´ ulcsordul´ ashoz (ami pozit´ıv vagy negat´ıv ir´anyban t´ ul nagy sz´am ´abr´azol´as´anak k´ıs´erlet´et jelenti, azaz a sz´ am´ abr´ azol´ asi intervallumb´ol l´ep¨ unk ki) hasonl´o az alulcsordul´as [underflow]: olyan kis abszol´ ut ´ert´ek˝ u sz´ amot akarunk ´abr´azolni, ami m´ar nem ´abr´azolhat´o. A kettes sz´ amrendszerben t¨ ort´en˝ o normaliz´alt ´abr´azol´asnak k¨osz¨onhet˝o megtakar´ıt´as (azaz hogy a mantissza els˝ o sz´ amjegye fixen 1, ´ıgy a mantissz´anak csak az 1-t˝ol jobbra l´ev˝o r´esz´et t´ aroljuk el, ezzel 1 bitet megtakar´ıtva) h´atr´anyos hat´asa itt jelentkezik: a legkisebb t´arolhat´o mantissza 1.0 . . . 0, a legkisebb karakterisztika AKmin (ahol A jelenti a sz´amrendszer alapj´at, Kmin pedig a legkisebb ´ abr´ azolhat´ o karakterisztik´at), a legkisebb t´arolhat´o pozit´ıv sz´am ezek szorzata: 1.0 . . . 0 · AKmin = AKmin . 3.5.14. p´ elda. 10 bites mantissza ´es 5 bites excess-15 exponens t´arol´as eset´en a legkisebb ´abr´azolhat´ o pozit´ıv sz´ am: 1.0 . . . 0 · 2−15 = 2115 = 0.000030517578125. 3.5.15. p´ elda. 10 bites mantissza ´es 5 bites excess-15 exponens t´arol´as eset´en a legnagyobb abr´ ´ azolhat´ o negat´ıv sz´ am: −1.0 . . . 0 · 2−15 = 2115 = −0.000030517578125. Az el˝ oz˝ o k´et p´elda eredm´eny´eb˝ ol k¨ ovetkezik, hogy a null´at sem tudjuk ´abr´azolni! Sajnos a legkisebb pozit´ıv ´es a legnagyobb negat´ıv ´ert´ek k¨oz¨ott a szomsz´edos t´avols´agokhoz k´epest nagy ´ abr´ azolhatatlan tartom´ any h´ uz´odik, amit alulcsordul´ asi r´esnek [underflow gap] nevez¨ unk (l´ asd a 9. ´ abr´ an). A kis sz´ amok ´abr´azolhatatlans´aga mellett sokkal nagyobb probl´ema
−1
1 0
1
−1 0
9. ´ abra. Lebeg˝opontos sz´am´abr´azol´as eset´en a nulla k¨or¨ uli alulcsordul´asi r´es (2 bites mantissza, 3 bites exponens excess-4 m´odon t´arolva). az, hogy ha az eddigiek alapj´ an j´ arn´ ank el, akkor b´armely k´et ´abr´azolhat´o lebeg˝opontos sz´am k¨ ul¨ onbs´ege nem biztos, hogy ´ abr´ azolhat´o maradna, azaz null´aval helyettes´ıt˝odne. Ez ´ori´asi probl´ema a kis abszol´ ut ´ert´ek˝ u sz´ amokkal dolgoz´o algoritmusok eset´eben: ha egy kivon´as ut´an nem 12
garant´ alhat´ o, hogy az eredm´eny ´ abr´ azolhat´o (azaz nem nulla), akkor hogyan lehetn´enk abban biztosak, hogy a k¨ ovetkez˝ o sz´ am´ıt´ as nem fog hib´ahoz vezetni? P´eld´ak: Ha egy sz´amot elosztunk m´ asik k´et, nem nulla sz´ am k¨ ul¨ onbs´eg´evel, lehet, hogy null´aval fogunk osztani? Ha egy nem nulla sz´ amb´ ol kivonunk egy m´ asik nem nulla sz´amot, majd k´es˝obb ugyanezt hozz´aadjuk, akkor nem fogjuk visszakapni az eredeti sz´ amunkat? 3.5.16. p´ elda. Sz´ am´ıtsuk ki 10 bites mantissza ´es 5 bites exponens excess-15 t´arol´asa eset´eben a m´ asodik legkisebb pozit´ıv sz´ amot: 1.0000000001 · 2−15 = 2−15 + 2−25 . Ha ebb˝ol kivonjuk a legkisebb ´ abr´ azolhat´ o sz´ amot (l´ asd A 3.5.14. p´eld´at) az eredm´eny 2−25 lesz, ami nyilv´an nem abr´ ´ azolhat´ o 10 bites mantissz´ an ´es 5 bites exponensen excess-15 form´aban (az eddig ismertetettek szerint).
3.6. Az IEEE 754 lebeg˝ opontos sz´ am´ abr´ azol´ as A lebeg˝ opontos sz´ amok ´ abr´ azol´ as´ anak a gyakorlatban is alkalmazott nemzetk¨ozi szabv´anya a az IEEE 754 = IEC 599 = ISO/IEC 60559. Az ebben defini´alt konkr´et bin´aris lebeg˝opontos abr´ ´ azol´ asok k¨ oz¨ ul n´eh´ any l´ athat´ o a 10. ´abr´an. A szabv´any a t´argyaltakon k´ıv¨ ul m´eg sok m´as tulajdons´ agot, funkci´ ot is defini´ al, p´eld´aul a kerek´ıt´es szab´alyait, m˝ uveleteket, kiv´etelkezel´est, s˝ot t´ızes alap´ u lebeg˝ opontos sz´ am´ abr´ azol´ ast is, de ezekkel jelen t´argy keret´eben nem foglalkozunk. elnevez´es binary16 binary32 binary64 binary128
mantissza m´erete [bit] 10 23 52 112
karakterisztika m´erete [bit] 5 8 11 15
karakterisztika eltol´as 15 127 1023 16383
10. ´ abra. IEEE 754 = IEC 599 = ISO/IEC 60559 szabv´ anyos bin´ aris lebeg˝opontos t´ıpusok jellemz˝oi
3.6.1. T´ arol´ asi sorrend A lebeg˝ opontos sz´ am t´ arol´ asi sorrendje a k¨ovetkez˝o: el˝ojel, exponens, mantissza. 3.6.1. p´ elda. A 3.5.6. p´elda eset´eben (binary16 form´atum) t´aroland´o: 0 11100 0011100010. 3.6.2. p´ elda. A 3.5.7. p´elda eset´eben (binary16 form´atum) t´aroland´o: 1 01011 0100000000. 3.6.3. p´ elda. A binary16 form´ atumban t´arolt 0000 0100 0000 0000 bitminta ´ertelmez´ese: el˝ojel: 0, exponens: 00001, exponens ´ert´eke: 1 − 15 = −14, mantissza: 0000000000, kieg´esz´ıtve a nem t´ arolt bittel: 1.0000000000, azaz a t´ arolt sz´am: 1.0000000000 · 2−14 = 2−14 . 3.6.4. p´ elda. A binary16 form´ atumban t´arolt 0000 0100 0000 0001 bitminta ´ertelmez´ese: el˝ojel: 0, exponens: 00001, exponens ´ert´eke: 1 − 15 = −14, mantissza: 0000000001, kieg´esz´ıtve a nem t´ arolt bittel: 1.0000000001 azaz a t´ arolt sz´am: 1.0000000001 · 2−14 = 2−14 + 2−24 . 3.6.5. feladat. Mondjuk p´eld´ at olyan m˝ uveletre vagy rel´aci´ora, amelyet k¨onnyebb elv´egezni, ha az eltolt sz´ am´ abr´ azol´ ast haszn´ aljuk az exponens t´arol´as´ara ´es a t´arol´asi sorrend: exponens, mantissza (azaz nem a normaliz´ alt alak sorrendje: mantissza, exponens) 3.6.2. Subnorm´ alt ´ abr´ azol´ as Az alulcsordul´ asi hiba megsz¨ untet´es´ehez – az IEEE 754 szabv´anynak megfelelve – az el˝oz˝oekben t´ argyaltakkal ellent´etben a nullak´ent t´arolt exponens ´ert´eket speci´alisan kell kezelni: ebben az esetben a mantissza legnagyobb helyi´ert´ek˝ u bitj´et az el˝oz˝oekben megismert fix 1 helyett null´anak kell ´ertelmezni, ´es az exponens eltol´ as´at is eggyel cs¨okkenteni kell (azaz p´eld´aul excess-15-r˝ol excess-14-re): 13
3.6.6. p´ elda. Az IEEE binary16 form´ atumban t´arolt 0000 0000 0000 0001 bitminta ´ertelmez´ese: el˝ ojel: 0, exponens: 00000, exponens ´ert´eke: mivel az exponens t´arolt ´ert´eke 0, az eredeti (excess15) ´ertelmez´es (0 − 15 = −15) helyett a m´odos´ıtott sz´am´ıt´asi m´od (excess-14) szerint: 0 − 14 = −14, mantissza: 0000000001, kieg´esz´ıtve a nem t´arolt bittel: 0.0000000001, azaz a t´arolt sz´am: 0.0000000001 · 2−14 = 2−24 . Ez az IEEE binary16 form´atumban t´arolhat´o legkisebb ´ert´ek. 3.6.7. p´ elda. Az IEEE binary16 form´ atumban t´arolt 0000 0000 0000 0010 bitminta ´ertelmez´ese: el˝ ojel: 0, exponens: 00000, exponens ´ert´eke: mivel az exponens t´arolt ´ert´eke 0, az eredeti (excess15) ´ertelmez´es (0 − 15 = −15) helyett a m´odos´ıtott sz´am´ıt´asi m´od (excess-14) szerint: 0 − 14 = −14, mantissza: 0000000010, kieg´esz´ıtve a nem t´arolt bittel: 0.0000000010, azaz a t´arolt sz´am: 0.0000000010 · 2−14 = 2−23 = 2 · 2−24 . 3.6.8. p´ elda. Az IEEE binary16 form´ atumban t´arolt 0000 0000 0000 0011 bitminta ´ertelmez´ese: el˝ ojel: 0, exponens: 00000, exponens ´ert´eke: mivel az exponens t´arolt ´ert´eke 0, az eredeti (excess15) ´ertelmez´es (0 − 15 = −15) helyett a m´odos´ıtott sz´am´ıt´asi m´od (excess-14) szerint: 0 − 14 = −14, mantissza: 0000000011, kieg´esz´ıtve a nem t´arolt bittel: 0.0000000011, azaz a t´arolt sz´am: 0.0000000011 · 2−14 = 3 · 2−24 . Ha az IEEE binary16 form´ atumban t´ arolhat´o m´asodik legkisebb pozit´ıv sz´amb´ol (l´asd a 3.6.7. feladatot) kivonjuk az ´ abr´ azolhat´ o legkisebb pozit´ıv sz´amot (l´asd a 3.6.6. feladatot), akkor eredm´eny¨ ul 2−24 -et kapunk, ami szint´en ´ abr´azolhat´o. ´Igy az IEEE 754 sz´am´abr´azol´asi m´odszerrel b´ armely k´et nem nulla ´ abr´ azolhat´ o sz´ am k¨ ul¨onbs´ege kiz´ar´olag akkor nulla, ha a k´et sz´am megegyezik. Ez egy nagyon fontos numerikus tulajdons´ag! 3.6.9. p´ elda. Az IEEE binary16 form´ atumban t´arolt 0000 0000 0000 0000 bitminta ´ertelmez´ese: el˝ ojel: 0, exponens: 00000, exponens ´ert´eke: mivel az exponens t´arolt ´ert´eke 0, az eredeti (excess15) ´ertelmez´es (0 − 15 = −15) helyett a m´odos´ıtott sz´am´ıt´asi m´od (excess-14) szerint: 0 − 14 = −14, mantissza: 0000000000, kieg´esz´ıtve a nem t´arolt bittel: 0.0000000000, azaz a t´arolt sz´am: 0.0000000000 · 2−14 = 0. 3.6.10. p´ elda. Az IEEE binary16 form´atumban t´arolt 1000 0000 0000 0000 bitminta ´ertelmez´ese: el˝ ojel: 1, exponens: 00000, exponens ´ert´eke: mivel az exponens t´arolt ´ert´eke 0, az eredeti (excess-15) ´ertelmez´es (0 − 15 = −15) helyett a m´odos´ıtott sz´am´ıt´asi m´od (excess-14) szerint: 0−14 = −14, mantissza: 0000000000, kieg´esz´ıtve a nem t´arolt bittel: 0.0000000000, azaz a t´arolt sz´ am: −0.0000000000 · 2−14 = −0. A nulla k´etfajta t´ arol´ asi m´ odj´ anak az a jelent˝os´ege, hogy jelezhet˝o, hogy az alulcsordult sz´am milyen ir´ anyb´ ol k¨ ozel´ıtette meg a null´ at. (Hasonl´oan jelezz¨ uk p´eld´aul a hat´ar´ert´ek sz´am´ıt´asn´al, hogy a null´ at milyen ir´ anyb´ ol k¨ ozel´ıtj¨ uk meg: limx→0− f (x) illetve limx→0+ f (x)) A http://babbage.cs.qc.cuny.edu/IEEE-754/index.xhtml oldalon kipr´ob´alhat´ok, ellen˝orizhet˝ ok az ´ atv´ alt´ asok. 3.6.3. V´ egtelenek ´ es a NaN Az IEEE 754 lebeg˝ opontos sz´ am´ abr´ azol´asok a val´os sz´amokon k´ıv¨ ul k´epesek t´arolni a ∞-t ´es −∞-t, tov´ abb´ a a speci´ alis NaN (Not a Number) ´ert´eket. Ez ut´obbit kapjuk eredm´eny¨ ul (t¨obbek k¨ oz¨ ott) akkor, ha null´ at null´ aval osztunk vagy ha negat´ıv sz´amb´ol vonunk n´egyzetgy¨ok¨ot. Ha az exponens minden bitje 1 ´es a mantissza nulla, akkor az (el˝ojelt˝ol f¨ ugg˝oen) ±∞ az abr´ ´ azolt ´ert´ek, ha a mantissza nem nulla, akkor NaN az ´abr´azolt ´ert´ek. 3.6.11. feladat. Adjuk meg a legnagyobb binary16-ban ´abr´azolhat´o sz´amot!
3.7. Numerikus matematika A numerikus matematika foglalkozik m´ar megl´ev˝o sz´am´ıt´asi algoritmusok vizsg´alat´aval illetve olyan u ´j algoritmusok tervez´es´evel, amelyek figyelembe veszik, hogy a sz´am´ıt´og´epen v´egrehajtott sz´ am´ıt´ as sor´ an az el˝ oz˝ oekben ismertetett hib´ak az egym´as ut´an v´egzett m˝ uveletek sor´an ne n˝ ojenek olyan nagyra, hogy mag´ anak az eredm´enynek a haszn´alhat´os´ag´at vesz´elyeztetn´ek.
14
4. Karakterek ´ es k´ odol´ asuk 4.1. Karakterek ´ es karakterk´ eszletek A karakter t [character] (a sz´ amhoz hasonl´oan) fogalomnak tekintj¨ uk, amit meg kell tudni jelen´ıteni ´ırott form´ aban, illetve el kell tudni t´arolni a mem´ori´aban vagy b´armely m´as t´arol´oeszk¨oz¨on, f´ ajlban, illetve tov´ abb´ıtani kell tudni egy informatikai h´al´ozaton. Karakter lehet az ABC egy bet˝ uje, egy sz´ am, egy ´ır´ asjel (a sz´ ok¨ ozt is bele´ertve) vagy egy´eb m´as ´ır´asrendszerben haszn´alt jel illetve vez´erl˝ o karakter (p´eld´ aul soremel´es) is. Karakterk´eszlet [character set, charset] alatt karakterek kiv´alasztott csoportj´at ´ertj¨ uk (a kiv´alaszt´ as lehet tetsz˝ oleges, de ´ altal´ aban valamely orsz´ag, nemzetis´eg, nyelv, r´egi´o alapj´an t¨ort´enik).
4.2. Karakterek k´ odol´ asa Karakterek k´ odol´ asa [character encoding, coded character set] alatt a karakterekhez valamilyen ´ert´ek (k´ od) rendel´es´et ´ertj¨ uk. Ilyen p´eld´aul a Morze-k´od, ami karakterekhez hosszabb ´es r¨ovidebb impulzusokb´ ol ´ all´ o k´ odokat rendel (amiket azt´an k¨onnyen lehet tov´abb´ıtani p´eld´aul egy r´adi´o ad´ o-vev˝ o segts´eg´evel), vagy a Braille-k´od, ami karakterekhez 3D objektumokat rendel (amit azt´ an megfelel˝ o technol´ ogi´ aval kinyomtatva” l´at´asukban s´er¨ ult emberek is k´epesek elolvasni). ” Az informatik´ aban a karakterk´ odol´ as a´ltal´aban a karakterhez egy sz´am rendel´es´et jelenti (amit azt´ an valamilyen m´ odszerrel t´ arolunk). Pl: a 65 jelentse az A” bet˝ ut. ” Karakterek t´ arol´ asi form´ aj´ a n [characer encoding form, character encoding scheme] a karakter k´ odok (sz´ amok) konkr´et t´ arol´ asi m´ odj´at ´ertj¨ uk. Ez lehet trivi´alis, p´eld´aul hogy egy megfelel˝o hossz´ us´ ag´ u, eg´eszek t´ arol´ as´ ara haszn´ alt ´abr´azol´ast alkalmazunk, vagy lehet szofisztik´altabb, p´eld´ aul egy t¨ om¨ orebb – de bonyolultabb – v´altoz´o k´odhossz´ us´ag´ u k´odol´as eset´eben. Pl. a 65-¨ot egy b´ ajtos el˝ ojel n´elk¨ uli eg´eszk´ent ´ abr´ azolva a 01000001 jelenti az A” bet˝ ut. ” Egyes k´ odol´ asi m´ odszerek egyszerre meghat´arozz´ak a karakterek k´odol´as´at ´es a k´odok t´arol´asi form´ aj´ at. Tipikusan ilyen k´ odol´ asi m´ odszerek a klasszikus k´odt´abl´ak [code page, character map, charmap], amelyek el˝ ojel n´elk¨ uli eg´eszk´ent, egy b´ajton ´abr´azolnak egy karaktert.
4.3. Klasszikus k´ odt´ abl´ ak 4.3.1. Az ASCII k´ odt´ abla Az American Standard Code for Information Interchange (ASCII) 7-bites k´odt´abla l´athat´o a 11. abr´ ´ an. Az egyes karakterek k´ odja a karakter sor´anak ´es oszlop´anak fejl´ec´eb˝ol ad´odik: p´eld´aul a @ k´ odja 0x40, a W k´ odja 0x57.
11. ´ abra. Az ASCII 7-bites k´odt´abla (forr´as: wikipedia.org/wiki/ASCII) Nagyon fontos kiemelni, hogy az ASCII k´odt´abla 7-bites, azaz 128 karakter k´odol´as´ara alkalmas. Ha 8-biten t´ aroljuk vagy tov´ abb´ıtjuk, a legnagyobb helyi´ert´ek˝ u bitet null´ara ´all´ıtjuk.
15
4.3.1. feladat. A home1.paulschou.net/tools/xlate/ honlapon ellen˝orizhet˝ok az ASCII karakterek bin´ aris ´ atv´ alt´ asai. 4.3.2. Az ISO 8859-X k´ odt´ abl´ ak Az ISO/IEC 8859-X k´ odt´ abl´ ak az ISO ´es az IEC szabv´anyos´ıt´o test¨ uletek k¨oz¨os k´odt´abl´ai, c´eljuk, hogy min´el t¨ obb region´ alis karaktert tartalmazzanak. Az ASCII k´odt´abla az ISO 8859-X k´odt´ abl´ ak r´esze, azaz minden ASCII k´ od egyben ´erv´enyes ISO 8859-X k´od is. Mi a leggyakrabban az ISO 8859-1 (nyugat-eur´ opai) ´es az ISO 8859-2 (k¨oz´ep-eur´opai) k´odt´abl´akkal tal´alkozhatunk, ezeket szok´ as latin-1 ´es latin-2 k´ odt´ abl´aknak is nevezni. Az ISO 8859-1 k´odt´abl´at ISO 8859-15 (latin-9) n´even friss´ıtett´ek (t¨ obbek k¨ oz¨ott beleker¨ ult az euro karakter), ´es hasonl´o t¨ort´ent az ISO 8859-2-vel is: ISO 8859-16 (latin-10) n´even friss´ıtett´ek. 4.3.3. A Windows k´ odt´ abl´ ak Az ASCII kiterjeszt´es´evel a Microsoft megalkotta saj´at 8-bites k´odt´abl´ait, k¨ ul¨on-k¨ ul¨on egyes r´egi´ okra. Mi a leggyakrabban a windows-1250 (k¨oz´ep-eur´opai) ´es a windows-1252 (nyugat-eur´opai) k´ odk´eszletekkel tal´ alkozhatunk. Ezeket szok´as windows latin-2 illetve windows latin-1 k´odt´abl´ aknak is nevezni. Szint´en fontos tulajdons´ aga ezeknek a k´odoknak is, hogy az ASCII-t m´odos´ıt´as n´elk¨ ul tartalmazz´ ak, azaz annak csak kieg´esz´ıt´esei. Az ISO 8859-X k´odt´abl´ak ´es a windows-xxxx k´odt´abl´ak nagy r´eszben egyeznek (nem kiz´ ar´ olag a k¨oz¨os ASCII r´eszek), de nem teljes m´ert´ekben kompatibilisek egym´ assal. 4.3.4. Feladatok 4.3.2. feladat. Megv´ altozik-e egy adott ASCII karaktert t´arol´o b´ajt, ha el˝ojeles vagy el˝ojel n´elk¨ uli eg´eszk´ent t´ aroljuk? 4.3.3. feladat. Keress¨ uk meg az ISO 8859-1, az ISO 8859-2, a windows-1250 ´es a windows-1252 k´ odt´ abl´ ak kioszt´ asait! 4.3.4. feladat. Helyes eredm´enyt kapok, ha egy ASCII k´odolt karakterekb˝ol ´all´o f´ajlt a.) windows1250 b.) windows-1252 k´ odt´ abl´ ak alapj´an pr´ob´alom ´ertelmezni? 4.3.5. feladat. Mi lehet a magyar´ azata annak, hogy r´egebben (sajnos sokszor m´eg ma is) az ˝o ˝ bet˝ ˜ szerepelt? illetve O uk helyett (hib´ asan) ˜ o vagy O 4.3.6. feladat. Tudunk-e t¨ obb, k¨ ul¨ onb¨oz˝o k´odk´eszlethez tartoz´o karaktert egyetlen sz¨ovegf´ajlban t´ arolni (´es azokat helyesen megjelen´ıteni olvas´askor)? 4.3.7. feladat. Adjunk p´eld´ at olyan sz¨ovegf´ajlra, ami nem csak ASCII karaktereket tartalmaz, de m´egis azonos m´ odon ´ertelmezhet˝ o a.) ISO 8859-2 ´es windows-1250 b.) ISO 8859-1 ´es windows1252 k´ odt´ abl´ akkal!
4.4. A Unicode Az el˝ oz˝ oekben ismertetett k´ odt´ abl´ ak k¨oz¨os probl´em´aja, hogy ¨onmagukban nem k´epesek t¨obb nyelv˝ u sz¨ ovegek t´ arol´ as´ ara (s˝ ot, egyes esetekben m´eg egyetlen nyelv eset´eben sem, p´eld´aul: k´ınai, jap´ an), mivel a – 8 bites t´ arol´ asb´ ol ad´od´o – lehets´eges 256 k¨ ul¨onb¨oz˝o karakter nyilv´an nem elegend˝ o a vil´ ag ¨ osszes nyelv´eben haszn´alt bet˝ u ´es ´ır´asjel ´abr´azol´as´ara. Ennek a probl´em´anak a megold´ as´ ara j¨ ott l´etre a Unicode konzorcium, ami l´etrehozta ´es karbantartja a Unicode aj´anl´ast. A konzorcium 2014 ut´ an minden ´evben j´ uniusban kiad egy f˝o verzi´osz´am´ u friss´ıt´est (2014 - 7.0, 2015 - 8.0, stb.). A szabv´ any k¨ ozel sz´ az ´ır´asrendszert ´es t¨obb, mint sz´azezer karaktert tartalmaz, amik k¨ oz¨ ott ´el˝ o ´es holt nyelvek mellett megtal´alhat´ok matematikai ´es egy´eb szimb´olumok is. 4.4.1. feladat. A www.unicode.org/charts/ oldalon n´ezz¨ uk meg a Unicode ´altal t´amogatott karaktereket!
16
A Unicode azonos az ISO/IEC 10646 szabv´annyal. A Unicode egy karakter k´odol´asi szabv´any (figyelem, ¨ onmag´ aban nem k´ odt´ abla!), ami meghat´arozza, hogy egy konkr´et karakternek mennyi ´ a Unicode ´ert´eke [code point]. Altal´ aban U+hexa k´od form´aban jel¨olj¨ uk: p´eld´aul az euro jel k´ odja: U+20AC. Ezt a Unicode ´ert´eket k¨ ul¨onb¨oz˝o m´odokon lehet t´arolni. 4.4.1. Az UTF-8 Az UTF-8 a Unicode egy t´ arol´ asi form´aja (Unicode Transformation Format) ami a Unicode k´ odokat v´ altoz´ o hosszon, 1-6 b´ ajton t´arolja, a k´od ´ert´ek´et˝ol f¨ ugg˝oen. Mivel a Unicode-ban jelenleg nincsen 0x10FFFF-n´el nagyobb code point, ez´ert nincs 4 b´ajtn´al hosszabb UTF-8 k´od a gyakorlatban. Az UTF-8 legfontosabb tulajdons´agai: • ASCII kompatibilis, azaz minden ASCII sz¨oveg egyben helyes UTF-8 sz¨oveg is, • o al´ o, azaz nem kell az UTF-8 b´ajtsorozat elej´er˝ol kezdeni az olvas´ast, hogy ¨nszinkroniz´ pontosan el lehessen hat´ arolni az egyes karaktereket reprezent´al´o UTF-8 byte csoportokat. 4.4.2. Az UTF-16 Az UTF-16 t´ arol´ asi forma v´ altoz´ o hosszon, 2-4 b´ajton t´arolja a Unicode k´odokat. Nem ASCII kompatibilis. 4.4.3. Az UTF-32 Az UTF-32 t´ arol´ asi forma fix hosszon, 4 b´ajton t´arolja a Unicode k´odokat. A k´odol´as nagyon egyszer˝ u: az Unicode k´ odokat kell 4 b´ ajtos eg´eszekk´ent t´arolni. Nem ASCII kompatibilis. 4.4.4. Feladatok 4.4.2. feladat. Hogyan befoly´ asolj´ ak a t´arol´asi m´eretet a haszn´alt karakterek? Mikor ´erdemes az UTF-8 ´es mikor az UTF-16 k´ odol´ asi form´at v´alasztanunk? 4.4.3. feladat. Az UTF-8 ¨ onszinkroniz´al´o tulajdons´ag´anak milyen szerepe van a • v´eletlen¨ ul kiv´ alasztott poz´ıci´ ob´ ol t¨ort´en˝o megjelen´ıt´esre, • a hib´ as ´ atvitelb˝ ol ad´ od´ o ´ertelmez´esi probl´em´akra? 4.4.4. feladat. Az UTF-8, UTF-16, UTF-32 k´odol´asok k¨oz¨ ul melyek alkalmasak sz¨ovegek v´eletlenszer˝ u el´er´es´ere (azaz p´eld´ aul ha az x. karakterhez akarok k¨ozvetlen¨ ul ugrani)?
4.5. Szo ajlok ¨vegf´ Ha egy f´ ajlban csak sz¨ oveget akarunk t´arolni (pontosabban csak olyan karaktereket, amelyek mindegyike megtal´ alhat´ o egy kiv´ alasztott karakterk´eszletben), akkor nincs m´as dolgunk, mint a karakterek (k´ odt´ abl´ aja vagy valamely Unicode t´arol´asi form´aja szerinti) b´ajtjait egym´as ut´an ´ırni, ´es ezt elt´ arolni. Val´ oj´ aban is ez t¨ ort´enik, ezeket a f´ajlokat nevezz¨ uk egyszer˝ u sz¨ ovegf´ ajl oknak [plain text file], kiterjeszt´es¨ uk (´ altal´ aban): TXT.
4.6. Feladatok 4.6.1. feladat. Hasonl´ıtsuk ¨ ossze a 7 t´arol´asi form´ait: a.) el˝ojel n´elk¨ uli eg´eszk´ent, b.) kettes komplemens ´ abr´ azol´ as´ u el˝ ojeles eg´eszk´ent, c.) ASCII k´odol´assal d.) UTF-8 k´odol´assal! 4.6.2. feladat. Honn´et tudjuk, hogy egy sz¨ovegf´ajl beolvas´asakor a k´odokat melyik k´odt´abla szerint kell ´ertelmezn¨ unk? 4.6.3. feladat. Puszt´ an a sz¨ ovegf´ ajlba t¨ort´en˝o beleolvas´assal eld¨onthet˝o-e ´altal´anos esetben, hogy az milyen k´ odt´ abla szerint ´ertelmezend˝o?
17
4.6.4. feladat. T¨ olts¨ unk be a b¨ ong´esz˝onkbe egy sz¨ovegf´ajlt, majd m´odos´ıtsuk a k´odt´abl´at! K´ odoljuk ´ at a sz¨ ovegf´ ajlt a iconv parancs seg´ıts´eg´evel, ´es n´ezz¨ uk meg az eredm´enyt a b¨ong´esz˝ovel illetve az od programmal! 4.6.5. feladat. T¨ olts¨ uk be a www.itk.ppke.hu/oktatas oldalt, ´es a b¨ong´esz˝onkben ´all´ıtsuk ´at a karakterk´eszletet! Mi t¨ ort´enik? 4.6.6. feladat. Mi a mojibake? (Keress¨ unk r´a!) 4.6.7. feladat. Ha ´ekezetes karaktereket haszn´alunk egy SMS-ben, akkor van-e k¨ ul¨onbs´eg az egy SMS-ben elk¨ uldhet˝ o karakterek sz´ ama k¨oz¨ott, ha magyar (jobbra d˝ol˝o) ´ekezetekkel rendelkez˝o karaktereket vagy csak balra d˝ ol˝ o ´ekezetekkel rendelkez˝o karaktereket haszn´alunk? Indokoljuk meg!
18