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 |
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ű.
| 31 | 30______________24 | 23_____________________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

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.