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
[email protected]
Az adatmanipulációs fa Az 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.
Az architektúrának az egyik központi kérdése, hogy mely adattípusok kezelését támogatja. Az adattípusok fontosságát jelzi az is, hogy az adatmanipulációs fa legfelsőbb szintjét éppen az adattípusok foglalják el. A támogatott adattípusok halmazát az architektúra célzott alkalmazási területe határozza meg. Minden architektúra támogatja a fixpontos és a logikai adattípusokat, az üzleti alkalmazások a hangsúlyt a BCD-kódra és a karakter sztringre helyezik, a tudományos alkalmazások és a realtime alkalmazások többsége a lebegőpontos ábrázolást is magukban foglalják. A másik oldalról a választást behatárolja:
DMT
Data types (T)
Operations (O)
..
FP4
Adattípusok
+
-
*
/
..
rrr
rmr
mmm
..
Mûveletek
Operand-types (R)
Utasítás-típusok
Addressing modes(A)
Címzési módok
((R)+D) ((PC)+D) ((RI)+D) ((PC)+D)
– az alkalmazott technológia és – a költségek figyelembe vétele. Codes (C)
Kódok
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
Előjeles
Nem előjeles
Fixpontos
Lebegőpontos
Binárisan kódolt decimális
Nem numerikus
Alfanumerikus
Logikai
Karakter
Öndefiniáló
Jelölt
Sztring
Deszkriptoros
Ö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 Abszolút értékes
Egyes komplemens
Előjel nélküli
Kettes komplemens
Többletes
Előjel nélküli fixpontos tárolási formák MSB
LSB
fixpontos egész bináris pont
n MSB
LSB
fixpontos tört bináris pont
0 ≤ A ≤ 2 −1 n
n
0 ≤ A ≤ 1 − 2−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.
Decimális érték Bináris kód
Érték +127 Előjelbit: 0: + 1: kód
-127
-127
-1
0
+1
+127
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 Előjelbit: 0: + 1: kód
-127
Decimális érték Bináris kód
-127
-1
0
+1
+127
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 Előjelbit: 0: + 1: kód
-128
Decimális érték Bináris kód
-128
-1
0
+1
+127
1000 000
1111 1111
0000 0000
0000 0001
0111 1111
Negatív bináris számok Érték +127
2m-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 Bináris kód
-128
-1
0
+1
+127
0000 000
0111 1111
1000 0000
1000 0001
1111 1111
Lebegőpontos adattípusok
Lebegőpontos adatok Normalizált Hexadecimális radix Egyszeres
Nem normalizált
Bináris radix Dupla
Kiterjesztett
Négyszeres
Előjel nélküli lebegőpontos tárolás MSB
LSB MSB
karakterisztika
bináris pont
előjel nélküli lebegőpontos szám
LSB
mantissza (m)
1 2 m −1 ≤ A < 1⋅ 2 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 2m-1-1, ahol m=8, 11, 15
A különböző pontosságú számok ábrázolási formája
A = (−1) s ⋅ (1.a ) ⋅ 2 ± p + e 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ú karakterisztika szignifikandus előjele
szignifikandus bináris pont
kiterjesztett pontosságú
1
karakterisztika
szignifikandus bináris pont
Szignifikandus előjele 0 vagy 1 Karakterisztika számábrázolási módja 2m-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 Túlcsordulás kezelése ∞±a=∞ a/∞=0 a/0=∞ ∞ / ∞ = NaN Negatív túlcsordulás
Kifejezhető negatív számok
Negatív alulcsordulás
Pozitív alulcsordulás
Kifejezhető pozitív számok
Pozitív túlcsordulás
Nulla Legkisebb negatív normalizált szám Legkisebb pozitív normalizált szám Legnagyobb negatí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 normalizált
0
tetszőleges számérték
0
nem nulla számérték
0
0
+/- nulla
111...111
0
+/- végtelen
111...111
nem nulla számérték
http://babbage.cs.qc.edu/IEEE-754/
denormalizált
nem szám (NaN)
Kerekítés
LSB inkrementálása LSB utáni érték elhagyása
A A2
A1
0
A A1
A2
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 A2 túlcsordulást • ha A minimális érték A1 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
7
0111
0100
8
1000
1100
Hamming távolság
4
1
3
2
5 4
1 0
7
6
Hamming távolság
Decimális számjegy
Gray kód
0
000
1
001
2
011
3
010
4
110
5
111
6
101
7
100
BCD kódok
BCD Pakolt
Zónázott
EBCDIC
Változó
ASCII
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
LSB
– 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 316 • EBCDIC kódban az F16 gyakran használatos. Z
BCD
Z
BCD
Előjel LSB
BCD
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, 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