Budapesti Műszaki Főiskola Regionális Oktatási és Innovációs Központ Székesfehérvár Adattípusok Dr. Seebauer Márta főiskolai tanár seebauer.marta@roik.bmf.hu
Az adatmanipulációs fa z adatmanipulációs fa két szempontból hasznos: egyrészt tartalmazza a potenciális formákat és lehetőségeket másrészt ennek bizonyos részfái megmutatják pl. az adott konkrét implementációs modell (az adott processzor) lehetőségeit. z architektúrának az egyik központi kérdése, ogy mely adattípusok kezelését támogatja. Az dattípusok fontosságát jelzi az is, hogy az datmanipulációs fa legfelsőbb szintjét éppen az dattípusok foglalják el. támogatott adattípusok halmazát az architektúra élzott alkalmazási területe határozza meg. inden architektúra támogatja a fixpontos és a ogikai adattípusokat, az üzleti alkalmazások a angsúlyt a BCD-kódra és a karakter sztringre elyezik, a tudományos alkalmazások és a realime alkalmazások többsége a lebegőpontos brázolást is magukban foglalják. másik oldalról a választást behatárolja: az alkalmazott technológia és a költségek figyelembe vétele. Data types (T) Adattípusok Operations (O) Mûveletek Operand-types (R) Utasítás-típusok Addressing modes(a) Címzési módok Codes (C) Kódok DMT FP4.. + - * /.. rrr rmr mmm.. ((R)+D) ((PC)+D) ((RI)+D) ((PC)+D).. IOOIIOO......
Adattípusok adattípusok elemi adattípusok adatszerkezetek (adatstruktúrák) Az adatszerkezetek elemi adatokból épülnek fel. Az elemi adatnak nincs szerkezete, egyes részeit nem tudjuk külön kezelni. Adatszerkezetekről általában a memóriával kapcsolatban beszélhetünk: az adatszerkezet állhat azonos típusú elemekből (tömb, vektor, szöveg, verem, sor, lista, fa, amelyeknek a leggyakrabban alkalmazott fajtája a bináris fa, és a halmaz) állhat különböző típusú részekből, a részeket egyenként kell megadni (rekord) állhat többféle típusú részekből, de a részekre osztás is többféleképpen történhet (alternatív szerkezet).
Elemi adattípusok Elemi adattípusok Numerikus Nem numerikus Előjeles Nem előjeles Alfanumerikus Logikai Öndefiniáló Fixpontos Karakter Jelölt Lebegőpontos Sztring Deszkriptoros Binárisan kódolt decimális Összetett
Fixpontos adattípusok Fixpontos 1 byte 8 bit Félszó 16 bit Szó 32 bit Dupla szó 64 bit Quadszó 128 bit Előjeles Előjel nélküli Abszolút értékes Egyes komplemens Kettes komplemens Többletes
Előjel nélküli fixpontos tárolási formák MSB LSB fixpontos egész n 0 A 2 1 n bináris pont MSB LSB fixpontos tört 0 A 1 2 n bináris pont n
Negatív bináris számok Abszolút értékes kód Az előjelbit 0 pozitív szám 1 negatív szám a soron következõ bitek jelzik a szám abszolút értékét. Érték +127-127 kód Előjelbit: 0: + 1: - Decimális érték -127-1 0 +1 +127 Bináris kód 1111 1111 1000 0001 0000 0000 0000 0001 0111 1111
Negatív bináris számok Inverz vagy egyes komplemens egy egyszerű inverz-képzés Érték +127 kód Előjelbit: 0: + 1: - -127 Decimális érték -127-1 0 +1 +127 Bináris kód 1000 000 1111 1110 0000 0000 0000 0001 0111 1111
Negatív bináris számok Kettes komplemens inverzképzés és hozzáadunk 1-et az LSB-hez (8 biten 256 db értéket lehet ábrázolni) Érték +127 kód Előjelbit: 0: + 1: - -128 Decimális érték -128-1 0 +1 +127 Bináris kód 1000 000 1111 1111 0000 0000 0000 0001 0111 1111
Negatív bináris számok Érték +127 2 m-1 többletes vagy Additív kód (eltolt nullájú kód) Például a 128-többletes kód kód -128 Decimális érték -128-1 0 +1 +127 Bináris kód 0000 000 0111 1111 1000 0000 1000 0001 1111 1111
Lebegőpontos adattípusok Lebegőpontos adatok Normalizált Nem normalizált Hexadecimális radix Bináris radix Egyszeres Dupla Kiterjesztett Négyszeres
Előjel nélküli lebegőpontos tárolás MSB LSB MSB LSB karakterisztika bináris pont mantissza (m) előjel nélküli lebegőpontos szám 1 m 2 1 2 A < 1 2
IEEE 754 szabvány a lebegőpontos számok ábrázolására A lebegőpontos számok normalizált formája s - a mantissza (fixpontos) előjele 0, ha a szám pozitív, 1, ha negatív a az egyesekre normalizált mantissza törtrésze p a karakterisztika eredeti értéke e az eltolás (többlet) értéke, melynek nagysága 2 m-1-1, ahol m=8, 11, 15 A különböző pontosságú számok ábrázolási formája A s ± p+ e = ( 1) (1. a) 2 Előjel Mantissza Karakterisztika Egyszeres pontosság 32 bit 1 bit 23 bit 8 bit Dupla pontosság 64 bit 1 bit 52 bit 11 bit Kiterjesztett pontosság 80 bit 1 bit 64 bit 15 bit Négyszeres pontosság 128 bit 1 bit 112 bit 15 bit
Előjeles lebegőpontos adatformátum szignifikandus előjele egyszeres és dupla pontosságú szignifikandus előjele karakterisztika bináris pont 1 szignifikandus kiterjesztett pontosságú karakterisztika bináris pont szignifikandus Szignifikandus előjele 0 vagy 1 Karakterisztika számábrázolási módja 2 m-1-1 többletes (m=8, 11, 15) Szignifikandus fixpontos, egyesekre normalizált törtszám, így a mantissza 1 és 2 közé eső törtszám, amelynek egész részét egyszeres és dupla pontosságú formátumban nem ábrázolnak (rejtett bit). Aritmetikai műveletek végrehajtásához a hardver vagy a szoftver a rejtett bitet valóságossá alakítja a karakterisztikát kettes komplemensű kódra alakítja előjelet megduplázza
Lebegőpontos számábrázolási tartományok Negatív úlcsordulás Kifejezhető negatív számok Negatív alulcsordulás Pozitív alulcsordulás Túlcsordulás kezelése ± a = a / = 0 a / 0 = / = NaN Kifejezhető pozitív számok Pozitív túlcsordulás Legnagyobb negatív normalizált szám Nulla Legkisebb negatív normalizált szám Legkisebb pozitív normalizált szám Legnagyobb pozitív normalizált szám Egyszeres pontosság: ±1,18 10-38... ±3,40 10 +38 Dupla pontosság: ±2,23 10-308... ±1,80 10 +308
IEEE 754 szerinti adatformátumok szignifikandus előjele karakterisztika szignifikandus 0<Kitevő<Max tetszőleges számérték normalizált 0 nem nulla számérték denormalizált 0 0 +/- nulla 111...111 0 +/- végtelen 111...111 nem nulla számérték nem szám (NaN) http://babbage.cs.qc.edu/ieee-754/
LSB inkrementálása Kerekítés A LSB utáni érték elhagyása A A 2 A 1 0 A 1 A 2 Pontos érték Ha az elvégzett művelet eredménye nem ábrázolható (pl. szorzat), kerekítést kell alkalmazni a legközelebbi ábrázolható számértékre; ha a távolság egyforma, akkor páros értékű számra, LSB=0 0 érték felé + vagy - felé Ha a kerekítéskor előálló számérték nem ábrázolható, akkor a processzor kivételt kezdeményez ha A maximális érték A 2 túlcsordulást ha A minimális érték A 1 alulcsordulást eredményez.
Bináris kódolt decimális számrendszerek Decimális számjegy BCD kód Gray kód Aiken kód Stibitz kód 2 az 5-ből kód 0 0000 0000 0000 0011 11000 1 0001 0001 0001 0100 00011 2 0010 0011 0010 0101 00101 3 0011 0010 0011 0110 00110 4 0100 0110 0100 0111 01001 5 0101 0111 1011 1000 01010 6 0110 0101 1100 1001 01100 7 0111 0100 1101 1010 10001 8 1000 1100 1110 1011 10010 9 1001 1101 1111 1100 10100
Decimális számjegy BCD kód Gray kód Hamming távolság 7 0111 0100 8 1000 1100 Hamming távolság 4 1 Decimális számjegy Gray kód 0 000 1 001 2 011 3 010 3 0 1 2 4 7 5 6 4 5 6 7 110 111 101 100
BCD kódok BCD Pakolt Zónázott EBCDIC ASCII Változó Fix hosszúságú
BCD kód Elsősorban az adminisztratív jellegű alkalmazásoknál használatos, mivel megfelel a felhasználó adatábrázolásának. A konvertálása a belső ábrázolási formából a külsőbe és vissza könnyű, ami ezeknél az alkalmazásoknál elnyomja a komplexebb és ezért lassúbb belső műveleteket (+-*/). Általában csupán néhány és egyszerűbb műveletet rendelnek a BCD számokhoz. a pakolt decimális formátum, amely minden bájtot két 4-bites mezőre (tetrád) bont, ezek mindegyike tartalmaz egy-egy BCD számjegyet. A belső műveletekhez - a hatékonysága miatt - ez az formátum használatos leginkább. BCD BCD BCD BCD BCD Előjel a zónázott formátumnál szintén minden bájtot felosztunk két 4-bites mezőre, a zóna (Z) és a szám (BCD) mezőre, és egy bájt egyetlen számjegyet specifikál. A zóna mezőt úgy választják meg, hogy a Z-BCD mező nyomtatható karakterkombinációt adjon. Egyébként a zóna mező számára ASCII kódban a 3 16 EBCDIC kódban az F 16 gyakran használatos. LSB Z BCD Z BCD Előjel BCD LSB
Az előjel kezelése BCD formátumban - az előjel állhat a legmagasabb helyiértéken, ami egyszerűsíti az outputot, pl. a nyomtatóra; - az előjel állhat a legalacsonyabb helyiértéken, ami egyszerűsíti az aritmetikai műveleteket, mivel az mindig a legalacsonyabb helyiértéken kezdődik, és fontos ismerni már a művelet elején mindkét operandus előjelét - pakolt formátumnál a legfelső bájt legfelső bitje vagy a legalacsonyabb helyiértékű bájt alacsonyabb tetrádja az előjel - zónázott formátumnál a legalacsonyabb helyiértékű bájt zónarészében helyezkedik el az előjel A pozitív és negatív előjelet lehet kódolva megadni, - felhasználva a számok által nem használt négy bit hat érvénytelen kombinációját (például az A, C, E, F = +, a B és D = -) - a + és - ASCII kódját felhasználva - külön előjelbájt, amelynek legfelső bitje az előjel, a többi bit kihasználatlan
Alfanumerikus adatok Alfanumerikus ábrázolásról akkor beszélünk, amikor számokat, betűket, különféle karaktereket önállóan, egymástól függetlenül, karakterenként akarunk ábrázolni. Az ábrázolás bájtonként egy-egy karakter formájában történik, akár EBCDIC, akár pedig ASCII kódot használunk. A char adattípus egyetlen bájton tárolja a karaktert. A sztring karakter típusú elemekből épül fel. A sztring adattípus szöveges információt tárol. A szöveg hossza 255 karakterig terjedhet.
ASCII kód Az ASCII (American Standard Code for Information Interchange) egy karakterkészlet és karakterkódolási szabvány, amely a latin ábécén alapul és az angol nyelvben és sok nyugat-európai nyelvben használatos betűket tartalmazza. Leggyakoribb felhasználása a számítógépeken, illetve szövegeket kezelő egyszerű eszközökön használt szövegek reprezentációja. A kódrendszer 127 karakterhelyet tartalmaz. Az első 32 karakter (0 31), valamint a 127 kódú karakter úgynevezett vezérlőkódokat tartalmaz. A 7 bites ASCII kódot a táblázatból az X1 oktális X2 hexadecimális értékeinek kiolvasásával lehet meghatározni. A bináris megfelelő az oktális és a hexadecimális értékek alapján előállítható. A táblázat megmutatja, hogy az ASCII kód tisztán 7 bites. A 8 bites ASCII a 7 bites kód kiegészített változata.
EBCDIC kód Az EBCDIC (Extended Binary Coded Decimal Interchange Code) a 80 oszlopos lyukkártyás adatfeldolgozó rendszerekben alakult ki. Ennek legnagyobb bázisa az IBM volt. A kód alapja a tízes számrendszer. A kezdeti időkben csak számokkal dolgoztak (BCD kódok), erre tökéletesen alkalmas volt a kártya lyukasztási rendszere. Az igények fejlődése következtében a meglévő hardver rendszereken kevés változtatással és a kód kibővítésével a szöveges információ is megfelelő szoftverrel feldolgozásra kerülhetett. A táblázatban a jel csoportok elhelyezkedése világosan mutatja, hogy a tízes számrendszer alapján hozták létre.
Logikai adatok Logikai adatnak a logikai műveletben szereplő változót értjük. Ennek ábrázolása elvileg egy bitet igényel. - a logikai adatot is a gép minimálisan egy bájton tárolja, mivel ez a legkisebb megcímezhető adategység. A logikai adat rögzítése a bájt legnagyobb helyiértékű bitjén történik, a többi bitpozícióban pedig bináris nulla van. Ez a fix vagy rögzített hosszúságú ábrázolás. - mivel bármilyen adaton végezhetünk logikai műveletet, így bármilyen adatot tekinthetünk logikai változónak is (karaktersorozatot, bitsorozatot, numerikus operandust, stb.). Ilyenkor a gép egymástól függetlennek tekinti az operandus egyes bitjeit, és mindegyikkel külön-külön végzi el a kijelölt műveletet. A logikai adat hossza ilyenkor a bitsorozattól függően változó, de mindig egész számú bájtot igényel. Amennyiben több logikai változót egyetlen gépi szóban tárolunk, szükség lehet egy mező kiemelésére, ami maszkolással oldható meg.
Egyéb adattárolási módok Öndefiniáló adatforma az adatot ábrázoló bitek mellett kiegészítő biteket alkalmaznak az adat típusának jelölésére Jelölt adattárolás (tagged storage) a tárolt adat kiegészül a felhasználás módját befolyásoló információval, pl. az adat típusa és paritásbit. Előnye hardver szintű adatkonverzió, hibaellenőrzés. Deszkriptoros tárolási forma (data descriptor) egyszerűbb adatstruktúrák kezelését biztosítja kiegészítő információval, pl. hozzáférési jogok, felhasználási cél, tárolási hely. Előnye hardver szintű írásvédelem, hibaellenőrzés. Összetett strukturális forma (object-oriented, capability addressing schemes) hardverszintű megoldás esetén segíti a szoftver működését. Jellemzői a kapcsolódó információkat egy egységben kezeli az objektum létrehozása/törlése nem külön adatműveletekkel végezhető az objektumhoz tartozó összes adat elérése egy ütemben lehetséges konverziója speciális utasítással oldható meg