Adatábrázolás


1. ADATÁBRÁZOLÁS A SZÁMÍTÓGÉPEN

A számítógép fizikai felépítése miatt minden adat végső gépi formája egy bitsorozat. A számítógépes tárak logikailag legkisebb egysége a nyolc bináris számjegy elhelyezésére alkalmas byte. Egy byte-on 28=256 egymástól különböző bitsorozat helyezhető el.
A számítógépben alapvetően kétféle módon tárolják az adatokat. Az egyik mód a számok műveletvégzésre alkalmas formájú tárolása, az ún. gépi számábrázolás, míg a másik a tetszőleges betűkből, számokból, írásjegyekből és egyéb jelekből álló információ, a kódolt ábrázolás.
A számítógépen elvileg kétféle számtípust különböztetünk meg, az egész és a valós számokat. Ezeket az elnevezéseket itt nem a megszokott matematikai értelemben használjuk. A gépi egészeket interpretálhatjuk úgy is, mint olyan bináris számrendszerben felírt egész és tört részből álló számot, amelyben a törtet jelentő pontot valamely két számjegy közé odaképzeljük. A gép a pontot nem tárolja sehol, azt a programozónak kell elképzelnie. Ezt a számábrázolást fixpontos ábrázolásnak is nevezzük.
A gépi valós számok ún. hatványkitevős alakjának gépi ábrázolásai. Itt a törtpont helye a számon belül nem fix, ezért ezt a számábrázolást lebegőpontosnak nevezzük.

1. 1. A fixpontos gépi számábrázolás

A számítógépeken a fixpontos számokat általában két byte-on vagy 4 byte-on ábrázolják, azaz egy szám hossza 16, illetve 32 bit. Ha csak nemnegatív számokat kellene ábrázolni, 16 biten a legkisebb ábrázolható szám a nulla, a legnagyobb 216-1 lenne, míg 32 biten 232-1.
Ábrázoljuk például a –111(2) számot 16 biten kettes komplemens formában:
0000000000000111 - az eredeti szám
1111111111111000 - egyes komplemens
1111111111111001 - kettes komplemens

Ha ezt a kettes komplemenst hozzáadjuk egy tetszőleges 16 bites számhoz, az eredmény ugyanaz, mintha 111-et kivontunk volna belőle, ugyanis a legnagyobb helyiértékű bit egyszerűen elvész. E tulajdonságok miatt a negatív számok helyett azok kettes komplemensét tároljuk.
Hogyan tudjuk eldönteni például azt, hogy az 1010101010101010 szám pozitív-e, vagy egy másik szám kettes komplemense? A felírás alapján sehogyan. Ezért megegyezünk abban, hogy a legnagyobb ábrázolható pozitív szám 215-1 legyen, vagyis a nemnegatív számok csak a 15 alsó helyiérték bitet foglalják el, a negatív számoknak megfelelő kettes komplemensek első, legnagyobb helyiértékű bitje pedig 1 legyen.

A pozitív számok így

0000000000000000 és 0111111111111111

között, míg a negatív számok komplemensei

1000000000000000 és 1111111111111111

között helyezkednek el. Átszámolva decimális számokká a két byte-os egész értéke:

-32768 < I < 32767 lehet.

Ebben a számtartományban a pozitív számok legmagasabb helyiértékű bitje mindig 0, a negatívoké 1. Így ezt a bitet előjelbitnek is nevezik.

1. 2. Lebegőpontos számábrázolás

A lebegőpontos számábrázolás a számok hatványkitevős felírásán alapszik. A szám hatványkitevős alakját egy egész és egy törtrészből álló szám, valamint a számrendszer alapja hatványának szorzataként írhatjuk fel. Általánosan az M*pk alakban.
Természetesen bármely számot végtelen sok módon írhatunk fel hatványkitevős alakban, hiszen például:

11,1=0,111*102=0,0111*103=0,00111*104 stb.

Ahhoz, hogy a hatványkitevős formát egyértelművé tegyük, elfogadunk egy közös elvet, nevezetesen azt, hogy az M mindig kisebb kell, hogy legyen, mint 1, valamint a törtponttól jobbra álló első jegy nem lehet 0. A p alapú számrendszerben tehát az M-re vonatkozó korlátozások:

1/p < M < 1

Tízes számrendszerben például 0,1 < M < 1, kettesben 0,5 . M . 1. Ha M eleget tesz a fenti korlátozásnak, a szám normál formájú. M-et a szám mantisszájának, k-t pedig a szám karakterisztikájának nevezzük.
A lebegőpontos szám a számítógépen a bináris számok hatványkitevős alakja. A bináris számot először normál formájúvá kell átalakítani, majd a szám részére kijelölt tárrekeszekben ábrázolni. Egy számról négy adatot kell megőriznünk ahhoz, hogy értékét vissza tudjuk nyerni - a mantissza előjelét (a szám előjele), a mantissza abszolút értékét, a kitevő előjelét és a kitevő abszolút értékét. Ennek a négy adatnak a tárolását a különböző számítógépeken különféle módon oldják meg. Tekintsük át a két legáltalánosabban elterjedt megoldást!
A szám ábrázolása 4 byte-on, azaz 32 biten történik. Ábrázoljuk a 32 bitet, 0 sorszámú a legalacsonyabb, 31 pedig a legmagasabb helyiértékű.

3130______________2423_____________________0
------------------------------------------------------------

1.1. ábra: Fixpontos számok ábrázolása 32 biten

A 31. bit mindig a szám előjelét tartalmazza. A 0 jelenti a pozitív, az 1-es a negatív előjelet. A 24-30 bitek tartalmazzák az előjeles kitevőt, míg a 0-23 bitek a mantisszát. A mantissza képzésénél tér el a kétféle megoldás. Az IBM gépcsaládnál a normálás előtt a bináris számot hexadecimális formába képezzük le, és így végezzük el a normálást, tehát a törtpont utáni első hexadecimális jegynek kell nullánál nagyobbnak lennie, míg a PDP típusú gépeknél közvetlenül a bináris számot normálja a gép, azaz az első bináris törtjegynek kell nullánál nagyobbnak lennie.

Lássunk néhány példát!


A binárisan normált alak mantisszája tehát 110100101011, a hexadecimálisan normálté 110100101011, tehát ugyanaz, a kitevő az első esetben (7 biten) 0001000, a második esetben (ugyancsak 7 biten) 0000010.
Nézzünk most egy olyan példát, ahol a mantisszák nem azonosak:

A binárisan normált alak mantisszája tehát 11101, a hexadecimálisan normálté pedig 011101.
Bináris normálásnál tudjuk, hogy a mantissza legmagasabb helyiértékű jegye mindig 1, hiszen ez a normálás feltétele. Így ezt a bitet - azaz a 23-as bitet - nem használjuk a mantissza ábrázolására, hanem összevonjuk a 24-30 bitekkel, és a karakterisztika ábrázolására a 23-30- as részt vesszük igénybe. Általánosan alkalmazott módszer, hogy a szám kitevőjének értékét hozzáadjuk az 10000000 bináris konstanshoz, és az összeget tároljuk a 8 biten.

Például, ha a kitevő -2:

-3(10)= -11(2), a tárolt érték a 23-30 biten:
10000000 - 00000011 = 01111101

Ezt a kitevő-tárolási módot feszített előjeles, vagy alapértékes tárolásnak is nevezzük. A bináris 10000000 decimális értéke 128, a pozitív kitevő hozzáadódik a 128-hoz, míg a negatív kitevő levonódik belőle.
Hexadecimális normálásnál nincs mód arra, hogy a mantissza első bitjét más célra használjuk, az lehet nulla is. A karakterisztika ábrázolására tehát marad 7 bit, a 24-30-as rész. Hasonlóan a bináris normáláshoz, itt is az 1000000 számhoz adjuk hozzá a tényleges kitevőt, azaz itt is feszített előjeles eljárást alkalmazunk.
Bináris normálásnál a mantissza értéke 0,5 és 1 közé esik, a kitevőé pedig -128 és 127 közé. Az első esetben a kitevő bitek értéke nulla, a másodikban 11111111. Így a legkisebb és a legnagyobb szám, amely ezzel az eljárással ábrázolható:

Nmin=0,5*2-128
Nmax=1*2127

Hexadecimális normálásnál a mantissza legkisebb értéke 1/16=2-4 (amikor a mantissza 0001-gyel kezdődik), a kitevő szélső értékei pedig -64 és +63. Ennek megfelelően a számábrázolás határai:

Nmin=0,0625*16-64
Nmax=1*263


1.2. ábra: Lebegőpontos számok ábrázolási tartománya

A lebegőpontos számábrázolásnál tehát az A+B számtartomány használható számábrázolásra. A -Nmax-nál kisebb, a -Nmin és Nmin közé eső, valamint az Nmax-nál nagyobb számok nem ábrázolhatók. Ha egy művelet eredménye -Nmin és Nmin közé esik alulcsordulásról, ha -Nmax-nál kisebb, vagy +Nmax-nál nagyobb, túlcsordulásról beszélünk. A programfutás során fellépő alul-, vagy túlcsordulás kezeléséről a programozónak kell gondoskodnia. A pontosság növelésére a számítógépek lehetőséget adnak arra, hogy a lebegőpontos szám több mint négy byte-ot foglaljon el. Sok gép megenged hosszú (long) vagy duplapontosságú (double) lebegőpontos ábrázolást is.


2. DECIMÁLIS SZÁMOK, KÓDRENDSZEREK

2. 1. Decimális számok a számítógépen

A gazdasági jellegű feladatok megoldására is használt programozási nyelvek a fixpontos és lebegőpontos ábrázolás mellett közvetlenül is képesek aritmetikai műveleteket végezni decimális számokkal.
A decimális számábrázolás számítógéptől függ. A két legelterjedtebb típus az ASCII kódú ábrázolás (pl. PDP1 gépek) és a BCD ábrázolás (pl. IBM gépek).
A PDP gépeken többféle decimális szám létezik, egyes fajták csak beviteli/kiviteli, más formátumok aritmetikai célokat szolgálnak. Az ún. számsorok a tízes számrendszerbeli számok közvetlen ASCII kódú megadásai, ahol minden byte egy számjegyet tartalmaz. Ebből a típusból kétféle létezik aszerint, hogy a szám előjele külön byte-ot foglal el a szám előtt, vagy az előjel be van építve a számba. Az első esetben a szám első byte-jának tartalma hexadecimális 2D (mínusz), vagy 2B vagy 20 (plusz), azaz egy n jegyű szám n+1 byte-ot foglal el. n megengedett maximális értéke 31. A beépített előjelű decimális számban az előjel az utolsó számjeggyel közös byte-ban jelenik meg, a többi számjegy változatlanul ASCII kódú. Itt is két forma létezik, az ún. első zónás és második zónás formátum.

Az utolsó byte értékét az alábbi táblázat mutatja:

az előjel és az
utolsó jegy
1. zónás forma 2. zónás forma
+0 30 7B
+1 31 41
+2 32 42
+3 33 43
+4 34 44
+5 35 45
+6 36 46
+7 37 47
+8 38 48
+9 39 49
-0 70 7D
-1 71 4A
-2 72 4B
-3 73 4C
-4 74 4D
-5 75 4E
-6 76 4F
-7 77 50
-8 78 51
-9 79 52

2-1. táblázat: Decimális számok ábrázolása ASCII kódrendszerben

Ennél a számábrázolásnál ugyanannyi byte kell a számhoz, ahány számjegyből áll. Ez bizonyos fokig luxus, hiszen egy decimális számjegy ábrázolására 4 bit elegendő. Ezt használja ki az ún. tömörített számábrázolás. A tömörített formájú decimális számnál két számjegy kerül egy byte-ra. Az előjel az utolsó félbyte-ra kerül, mégpedig oly módon, hogy a hexadecimális A, C, E és F a "+" jelet, a B és D a "-" jelet reprezentálja. Általában a C és D érték használatos. Ha a szám páros számú számjegyből áll, nem marad hely az előjel számára, ugyanis a szám páros számú félbyte-ot tölt ki. Ezt a problémát úgy oldják meg, hogy a szám elé egy zérót írnak.

Példa: -1234
külön előjelbyte-tal: 2D31323334
beépített előjellel:
első zónás forma: 31323374
második zónás forma: 31323334D
tömörített forma: 01234D

Az IBM gépeken is két fajtája létezik a decimális számoknak, az ún. zónás hosszabb forma, ahol minden számjegynek külön byte felel meg, és a tömörített, rövidebb alak. A zónás alakban egy byte alacsonyabb helyiértékű félbyte-ja tartalmazza a számjegy bináris alakját, a felső félbyte tartalma hexadecimális F. A szám előjelét a legalacsonyabbb helyiértékű számjegy felső félbyte-jában ábrázoljuk, a "+" jelnek A, C vagy F, a "-" jelnek B vagy D felel meg. A szabvány jelölés: "+"=C, "-"=D.
A tömörített alakban egy byte-on két számjegy helyezkedik el bináris formában. Az előjel az utolsó byte alsó félbyte-jába kerül.

Példa: -1234
Zónás: F1F2F3D4
Tömörített: 01234D

2. 2. KÓDRENDSZEREK

A számjegyek, betűk, írásjelek és egyéb jelek (összefoglaló szóval karakterek) számítógépes ábrázolására bináris kódokat használunk. Az ábrázolandó karakterek száma nem haladja meg a 256-ot, az ábrázoláshoz elegendő 28 lehetőség, azaz egy byte. Nagyon fontos, hogy ugyanaz a bitkombináció ugyanazt a karaktert jelentse mindenütt a világon. Ezt biztosítják a nemzetközi kódszabványok. A világon ma két fő számítógépes kódszabvány létezik, az egyik az EBCDIC (Extended Binary Coded Decimal Interchange Code), a másik az ASCII (American Standard Code for Information Interchange). Ezek a kódszabványok az angol ABC kis- és nagybetűit, a decimális számjegyeket, néhány írásjelet és adatátviteli vezérlőjeleket tartalmaznak. A vezérlőkaraktereknek megfelelő bitkombinációk vagy valamilyen akciót váltanak ki abból a berendezésből, amelyikre küldjük őket, vagy jeleznek valamit. Azokat a karaktereket, amelyek a nyomtatón megjeleníthetők nyomtatható, a többit nem nyomtatható karaktereknek nevezzük.

Egy szintet vissza, vagy vissza a főmenübe.