17.05.2015 Views

Architektúrák és operációs rendszerek: Adatreprezentáció

Architektúrák és operációs rendszerek: Adatreprezentáció

Architektúrák és operációs rendszerek: Adatreprezentáció

SHOW MORE
SHOW LESS

Transform your PDFs into Flipbooks and boost your revenue!

Leverage SEO-optimized Flipbooks, powerful backlinks, and multimedia content to professionally showcase your products and significantly increase your reach.

Architektúrák és<br />

operációs <strong>rendszerek</strong>:<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

Adatreprezentáció<br />

Balogh Ádám<br />

Lőrentey Károly<br />

Eötvös Loránd Tudományegyetem<br />

Informatikai Kar<br />

Algoritmusok és Alkalmazásaik Tanszék


Tartalomjegyzék<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

1. Egész számok ábrázolása<br />

2. Törtszámok ábrázolása<br />

3. Szövegek ábrázolása<br />

4. Digitális logika<br />

2005. október 13., 12:52 Adatábrázolás<br />

2. oldal


Helyi értékes szám<strong>rendszerek</strong><br />

• Emlékeztetőül a tízes számrendszer:<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Általánosítás:<br />

273.43 = 2 · 10 2 + 7 · 10 1 + 3 · 10 0 + 4 · 10 -1 + 3 · 10 -2<br />

– Legyen b > 1 a számrendszer pozitív egész alapszáma (bázisa)<br />

– Legyenek a i<br />

∈ { 0, …, b – 1 } számjegyek<br />

– Az (…a 2<br />

a 1<br />

a 0<br />

.a -1<br />

a -2<br />

...) b<br />

, b-számrendszerbeli szám számértéke:<br />

• Példák:<br />

… + a 2<br />

b 2 + a 1<br />

b 1 + a 0 + a -1<br />

b -1 + a -2<br />

b -2 + … = Σa i<br />

b i<br />

– (453.82) 9<br />

= 4 · 81 + 5 · 9 + 3 + 8/9 + 2/81 = 372 + 74/81 ≈ 372.91358<br />

– (242.13) 5<br />

= 2 · 25 + 4 · 5 + 2 + 1/5 + 3/25 = 72 + 8/25 = 72.32<br />

– (11021.121) 3<br />

= 1 · 81 + 1 · 27 + 2 · 3 + 1 + 1/3 + 2/9 + 1/27 ≈ 115.592<br />

2005. október 13., 12:52 Adatábrázolás<br />

3. oldal


Helyi értékes szám<strong>rendszerek</strong><br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A tíznél nagyobb alapszámú szám<strong>rendszerek</strong> leírásához<br />

a 0-9 számjegyeket az angol ábécé betűivel egészítjük ki:<br />

– (3E8) 16<br />

= 3 · 256 + 14 · 16 + 8 = 1000<br />

– (BEEF) 16<br />

= 11 · 4096 + 14 · 256 + 14 · 16 + 15 = 48879<br />

– (CICA) 20<br />

= 12 · 8000 + 18 · 400 + 12 · 20 + 10 = 103450<br />

• Vigyázat, a jelölés nem egységes!<br />

– Ahány ember, annyi jelölés<br />

– Gyakran csak a szövegkörnyezetből derül ki az alapszám<br />

– (BEEF) 16<br />

helyett általában 0xBEEF-et írnak (C nyelv)<br />

– (7342) 8<br />

helyett gyakran 07342-t írnak (szintén C nyelv)<br />

2005. október 13., 12:52 Adatábrázolás<br />

4. oldal


Átszámolás új alapszámra<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A szám<strong>rendszerek</strong> között a cél-alapszámmal<br />

történő sorozatos maradékos osztással tudunk<br />

átszámolni<br />

– A legkisebb helyiértéktől kezdve kapjuk meg a<br />

számjegyeket: jobbról balra haladunk<br />

– Az osztás maradéka lesz az eredmény következő<br />

számjegye<br />

– A hányadost ismét leosztjuk<br />

– Addig ismételjük, míg nullát nem kapunk<br />

2005. október 13., 12:52 Adatábrázolás<br />

5. oldal


Átszámolási példa<br />

• Írjuk át 1000-et nyolcas alapra!<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

1000 div 8 = 125<br />

125 div 8 = 15<br />

15 div 8 = 1<br />

1 div 8 = 0<br />

1000 mod 8 = 0<br />

125 mod 8 = 5<br />

15 mod 8 = 7<br />

1 mod 8 = 1<br />

(vége)<br />

Eredmény: 1000 = (1750) 8<br />

2005. október 13., 12:52 Adatábrázolás<br />

6. oldal


Nevezetes szám<strong>rendszerek</strong><br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Tízes számrendszer<br />

– Ezt szoktuk meg, ezt szeretjük<br />

– Az ujjaink számától eltekintve<br />

kevés praktikus haszna van<br />

• Hatos, tizenkettes stb.<br />

szám<strong>rendszerek</strong><br />

– Hagyományos<br />

mértékegység<strong>rendszerek</strong><br />

– „Tucat”<br />

– Könnyű harmadolhatóság<br />

• Hatvanas számrendszer<br />

– Babilóniai eredet<br />

– Időmérés, trigonometria<br />

(fokok/órák, percek,<br />

másodpercek)<br />

• Kettes (bináris) számrendszer<br />

– Számjegyek: bitek (0, 1)<br />

• Tizenhatos számrendszer<br />

– Számjegyek: 0, 1, 2, 3, 4, 5, 6, 7, 8,<br />

9, A, B, C, D, E, F<br />

– A nyers bináris adatok<br />

leggyakoribb megjelenítési<br />

formája<br />

• Nyolcas számrendszer<br />

– A tizenhatos „régimódi”<br />

alternatívája<br />

• Hatvannégyes számrendszer<br />

– Adatátvitel (base64 kódolás,<br />

email mellékletek)<br />

2005. október 13., 12:52 Adatábrázolás<br />

7. oldal


Érdekesség: egzotikus szám<strong>rendszerek</strong><br />

• Negatív alapú szám<strong>rendszerek</strong><br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

– Ugyanezen képlet alapján<br />

– A számjegyek ugyanazok, mint a pozitív megfelelőnél<br />

– Pl: (18005) -10<br />

= 2005; (2015) -10<br />

= -2005; Nincs szükség előjelre!<br />

• Valós alapú szám<strong>rendszerek</strong><br />

– Pl. √2 alapú számrendszer<br />

– Általában csak a 0, 1 számjegyeket megengedve<br />

– Az egész számok kifejtése általában végtelen hosszú<br />

• Kiegyensúlyozott ternáris számrendszer<br />

– Hármas alap, -1, 0, +1 számjegyek („tritek”)<br />

– Sok szép, szimmetrikus tulajdonság<br />

– A binárishoz hasonlóan könnyű aritmetika<br />

– Szovjet kísérleti számítógépek alkalmazták, ma sajnos nincs<br />

használatban, pedig megépíteni is könnyű<br />

2005. október 13., 12:52 Adatábrázolás<br />

8. oldal


Számábrázolás feladata<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Feladat: számhalmazokat ügyes kódolással<br />

bitsorozattal ábrázolni<br />

– A bitsorozat hossza általában előre adott, rögzített<br />

• Neve: szóhossz, n-nel fogjuk jelölni<br />

• n a gyakorlatban általában 8, 16, 32 vagy 64<br />

• Így véges számú (2 n db) különböző számot írhatunk le<br />

– Ugyanaz a bitsorozat más és mást jelenthet a<br />

különböző megoldásokban<br />

– Így jelöljük a bitsorozatot: b n-1<br />

…b 2<br />

b 1<br />

b 0<br />

– Példa: 01101011 (vajon mit jelent?)<br />

2005. október 13., 12:52 Adatábrázolás<br />

9. oldal


Nemnegatív egész számok ábrázolása<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Triviális feladat, egyszerűen használjuk a bináris<br />

számrendszerbeli átírás számjegyeit<br />

– A kettes számrendszer az informatika számrendszere<br />

– Leibniz (1703) világított rá először<br />

– Neumann János tette általánossá alkalmazását<br />

– Példák:<br />

00000000 := (0) 2<br />

= 0<br />

01101011 := (1101011) 2<br />

= 107<br />

11111111 := (11111111) 2<br />

= 255<br />

• Ábrázolható számtartomány: [0 .. 2 n -1]<br />

2005. október 13., 12:52 Adatábrázolás<br />

10. oldal


Néhány kerek szám<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

2 0 = 1<br />

2 1 = 2<br />

2 2 = 4<br />

2 3 = 8<br />

2 4 = 16<br />

2 5 = 32<br />

2 6 = 64<br />

2 7 = 128<br />

2 8 = 256<br />

2 9 = 512<br />

2 10 = 1024<br />

2 11 = 2048<br />

2 12 = 4096<br />

2 13 = 8192<br />

2 14 = 16384<br />

2 15 = 32768<br />

2 16 = 65536<br />

2 31 = 2147483648<br />

2 32 = 4294967296<br />

2 64 = 18446744073709551616<br />

2 128 = 3402823669209<br />

3846346337460<br />

7431768211456<br />

2005. október 13., 12:52 Adatábrázolás<br />

11. oldal


SI Informatikai mennyiségprefixek<br />

• kilobyte (kB) 10 3<br />

• kibibyte (KiB) 2 10<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• megabyte (MB) 10 6<br />

• gigabyte (GB) 10 9<br />

• terabyte (TB) 10 12<br />

• petabyte (PB) 10 15<br />

• exabyte (EB) 10 18<br />

• zettabyte (YB) 10 21<br />

• yottabyte (YB) 10 24<br />

• mebibyte (MiB) 2 20<br />

• gibibyte (GiB) 2 30<br />

• tebibyte (TiB) 2 40<br />

• pebibyte (PiB) 2 50<br />

• exibyte (EiB) 2 60<br />

• A gyakorlatban általában kettőhatványértelemben<br />

használjuk a baloldali jelöléseket is<br />

2005. október 13., 12:52 Adatábrázolás<br />

12. oldal


Előjelbites számábrázolás<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Hogyan ábrázoljunk negatív számokat?<br />

• Ötlet: a legnagyobb helyiértékű bitet használjuk fel az<br />

előjel ábrázolására<br />

– Ha b n<br />

értéke 0, akkor a sorozat értéke (b n-1<br />

…b 2<br />

b 1<br />

b 0<br />

) 2<br />

, egyébként<br />

-(b n-1<br />

…b 2<br />

b 1<br />

b 0<br />

) 2<br />

– Példák:<br />

00000000 := (0000000) 2<br />

= 0 10000000 := -(0000000) 2<br />

= 0<br />

01101011 := (1101011) 2<br />

= 107 10000001 := -(0000001) 2<br />

= -1<br />

01111111 := (1111111) 2<br />

= 127 11111111 := -(1111111) 2<br />

= -127<br />

– Ábrázolható számtartomány: [-2 n-1 -1 .. 2 n-1 -1]<br />

– Gépi feldolgozásra kellemetlen, kényelmetlen ábrázolás:<br />

• Dupla nulla; emellett a nullából visszalépve váratlan ugrás történik<br />

• Összeadás, kivonás nehézkes, az előjelbitet figyelembe kell venni<br />

2005. október 13., 12:52 Adatábrázolás<br />

13. oldal


Egyes komplemens ábrázolás<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Az előjelbitet továbbra is fenntartjuk, de a negatív<br />

számokat úgy ábrázoljuk, hogy az abszolútértékük<br />

valamennyi bitjének értékét az ellenkezőjére állítjuk<br />

– Ezzel megszűnik a 0000… és az 1111… sorozatok közötti<br />

kellemetlen ugrás, jobban kezeljük tehát az alulcsordulást<br />

– Példák:<br />

00000000 := (0000000) 2<br />

= 0 10000000 := -(01111111) 2<br />

= -127<br />

01101011 := (1101011) 2<br />

= 107 10010100 := -(01101011) 2<br />

= -107<br />

01111111 := (1111111) 2<br />

= 127 11111111 := -(00000000) 2<br />

= 0<br />

– Ábrázolható számtartomány: [-2 n-1 -1 .. 2 n-1 -1] (mint előbb)<br />

– Használata mára szinte teljesen kikopott a gyakorlatból<br />

– A nullát továbbra is duplán ábrázoljuk!<br />

2005. október 13., 12:52 Adatábrázolás<br />

14. oldal


Kettes komplemens számábrázolás<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Kézenfekvő javítás a két nullaérték összevonása<br />

• A negatív számokat egyszerűen ábrázoljuk úgy, hogy<br />

nullából egy pozitív számot kivonva hagyjuk alulcsordulni az<br />

eredményt<br />

– Pontos leírás: a -k szám ábrázolásához először k bináris<br />

reprezentációjának komplemensét képezzük, majd az így kapott<br />

számhoz hozzáadunk 1-et<br />

– Példák:<br />

00000000 := (0) 2<br />

= 0 10000000 := -(01111111) 2<br />

= -(10000000) 2<br />

= -128<br />

01101011 := (1101011) 2<br />

= 107 10010100 := -(10010011) 2<br />

= -(1101100) 2<br />

= -108<br />

01111111 := -(0) 2<br />

= 127 11111111 := -(1) 2<br />

= -1<br />

– Ábrázolható számtartomány: [-2 n-1 .. 2 n-1 -1]<br />

– Ez szinte valamennyi mai számítógép-architektúra belső<br />

számábrázolási módszere<br />

2005. október 13., 12:52 Adatábrázolás<br />

15. oldal


Kettes komplemens számábrázolás<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Összeadás, kivonás közben nem kell előjelekkel<br />

bíbelődni:<br />

– Összeadáskor egyszerűen összeadjuk a számokat<br />

– Kivonáskor megváltoztatjuk a kivonandó előjelét<br />

(komplemens+1), majd egyszerűen összeadunk<br />

– Példa: Mennyi 45 – 23?<br />

1. Számábrázolás<br />

45 = 00101101, 23 = 00010111<br />

2. A kivonandó előjelváltása<br />

-23 = 11101001<br />

3. Összeadás 45 – 23 = 45 + (-23)<br />

00101101 + 11101001 = 00010110 (túlcsordulást levágva)<br />

4. Visszaírás tizedes alakba<br />

00010110 = 22<br />

2005. október 13., 12:52 Adatábrázolás<br />

16. oldal


Bájtsorrend<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A különböző processzorok más és más sorrendben tárolják a<br />

memóriában az egész számokat reprezentáló bájtsorozatokat<br />

– A választás önkényes, egyik megoldás sem egyértelműen „jobb” a többinél<br />

• Big-endian: A legmagasabb helyiértékű bájt kerül a legkisebb<br />

memóriacímre<br />

– 1144201745 = 0x44332211 = 44 33 22 11<br />

– Motorola 68000, SPARC, System/370<br />

– Előnye: könnyen olvasható, érthető<br />

• Little-endian: A legkisebb helyiértékű bájt kerül az első címre<br />

– 1144201745 = 0x44332211 = 11 22 33 44<br />

– Intel x86, MOS Technology 6502, DEC VAX<br />

– Előnye: a szó bájtokra vagy duplabájtokra bontásakor a kisebb helyiértékű<br />

részek kisebb címeken lesznek megtalálhatók, ami valamivel intuitívebb<br />

• Az elnevezéseket illetően lásd Swift Gulliver utazásait<br />

2005. október 13., 12:52 Adatábrázolás<br />

17. oldal


Bájtsorrend<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Egyes processzorok esetében a bájtsorrend menet<br />

közben konfigurálható<br />

– ARM, PowerPC, DEC Alpha, MIPS, PA-RISC, IA64 (Itanium)<br />

• Régebbi architektúrákon „vegyes” bájtsorrend is<br />

előfordult (middle-endian)<br />

– PDP-11: 0x44332211 = 33 44 11 22<br />

• Architektúrák közötti adatátvitelkor gondoskodni kell<br />

alkalmas bájtsorrend-konverziókról<br />

– Ha erről megfeledkezünk, értelmetlen adatokat kapunk<br />

– Igen gyakori, kellemetlen hibaforrás<br />

– Az internet protokollok egységesen big-endian ábrázolást<br />

rögzítenek<br />

2005. október 13., 12:52 Adatábrázolás<br />

18. oldal


Binary Coded Decimal (BCD)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Gyakran van szükség tízes számrendszerbeli számok<br />

ábrázolására<br />

– Pl. számviteli <strong>rendszerek</strong><br />

– A bináris ábrázolás használható volna, de az oda-vissza konverzió<br />

rontaná a hatékonyságot<br />

• Ötlet: a tízes alapú számaink számjegyeit kódoljuk egy-egy<br />

négyes bitcsoportban!<br />

0 = 0000 2 = 0010 1 = 0001 3 = 0011 4 = 0100<br />

5 = 0101 6 = 0110 7 = 0111 8 = 1000 9 = 1001<br />

– A fennmaradó hat kódpozícióhoz nem rendelünk értéket, vagy pl.<br />

előjel jelölésére használjuk<br />

– A reprezentációhoz négyes bitcsoportokra osztjuk a bitsorozatot<br />

– Példa: 4255 = 0100001001010101 (n = 16)<br />

– Ábrázolható számtartomány: [0 .. 10 n/4 ]<br />

2005. október 13., 12:52 Adatábrázolás<br />

19. oldal


„Bigints”, tetszőleges pontosság<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Ha nem férünk el egy szóban, rakjunk több szót<br />

egymás mellé<br />

• Az elemi műveletek úgy végezhetők, mintha 2 n<br />

alapú számrendszerben dolgoznánk, és a szavak<br />

volnának a számjegyeink<br />

– Az összeadó/szorzótáblát a gép elemi műveletei<br />

implementálják<br />

– A tulajdonképpeni műveleteket „kézzel”<br />

programozzuk be<br />

• A reprezentálható számtartomány a<br />

memóriamérettől függ, gyakorlatilag korlátlan<br />

2005. október 13., 12:52 Adatábrázolás<br />

20. oldal


Gray-kód<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Frank Gray, Bell Labs, 1953<br />

• Bináris számrendszer, melyben az egymás utáni<br />

értékek csupán egy bitben különböznek<br />

egymástól<br />

– Motiváció: (mechanikus) kapcsolók nem tudnak<br />

pontosan egyszerre váltani, ezért kapcsolás közben a<br />

belőlük épített számlálók egy rövid ideig rossz<br />

értéket látszanak felvenni<br />

– A Gray-kód használata elkerüli a dupla<br />

kapcsolásokat, így a hibaforrás meszűnik<br />

– Számlálás céljára használatos (+1 művelet)<br />

2005. október 13., 12:52 Adatábrázolás<br />

21. oldal


Gray-kód előállítása<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Ábrázolási tartomány: nemnegatív egészek, [0..2 n ]<br />

• n szélességű Gray-sorozatok rekurzív definíciója:<br />

– Ha n = 1, akkor a sorozat: {0, 1}<br />

– Egyébként az n széles sorozatot az n – 1 széles sorozatból<br />

állítjuk elő<br />

• Először az n-1-sorozat minden eleme elé írjunk nullát<br />

• Majd az így kapott sorozat után írjuk le az n-1-sorozat<br />

megfordítottját, minden elem elé egy 1-est írva<br />

– Példák:<br />

• n = 2: {00, 01, 11, 10}<br />

• n = 3: {000, 001, 011, 010, 110, 111, 101, 100}<br />

2005. október 13., 12:52 Adatábrázolás<br />

22. oldal


5 széles Gray-sorozat<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

00000 01100 11000 10100<br />

00001 01101 11001 10101<br />

00011 01111 11011 10111<br />

00010 01110 11010 10110<br />

00110 01010 11110 10010<br />

00111 01011 11111 10011<br />

00101 01001 11101 10001<br />

00100 01000 11100 10000<br />

2005. október 13., 12:52 Adatábrázolás<br />

23. oldal


Gray-kód alkalmazásai<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Kapcsolókkal működő adatátviteli<br />

szerkezeteknél a mai napig használják<br />

• Kombinatorikus programozási feladatok<br />

– Pl. soroljuk fel egy H halmaz összes részhalmazát<br />

– Ha a k. bit 1, akkor az aktuális részhalmaz<br />

tartalmazza H k. elemét<br />

• Hanoi tornyai probléma<br />

– Rendeljük a k. bitet a k. koronghoz<br />

– Ha a Gray-sorozat következő elemében a k. bit<br />

változott, akkor azt a korongot kell mozgatni a<br />

következő lépésben<br />

2005. október 13., 12:52 Adatábrázolás<br />

24. oldal


Linear Feedback Shift Register (LFSR)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Pszeudovéletlen számsorozatokat is használhatunk számlálásra<br />

• Egy lináris visszacsatolású eltolóregiszter ügyes<br />

visszacsatolófüggvénnyel igen hosszú ciklusú, véletlennek látszó<br />

bitsorozatot generál<br />

• A leggyorsabb számlálók<br />

– Közvetlenül hardverben építhetők<br />

• Rengeteg érdekes alkalmazás<br />

– Kriptográfia<br />

1 0 0 1 1 0 0 0 1 0 1 1 0 0 0 1<br />

Visszacsatolás<br />

– GPS (minden műhold saját, 1023 bit hosszú szekvenciát generál)<br />

– Digitális televíziózás<br />

• A bitfolyam zavaró szabályosságainak elfedésére<br />

0<br />

2005. október 13., 12:52 Adatábrázolás<br />

25. oldal<br />

1<br />

1<br />

XOR kapuk<br />

Kimenet


Tartalomjegyzék<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

1. Egész számok ábrázolása<br />

2. Törtszámok ábrázolása<br />

3. Szövegek ábrázolása<br />

4. Digitális logika<br />

2005. október 13., 12:52 Adatábrázolás<br />

26. oldal


Törtszámok ábrázolása<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A cél a valós számok ábrázolása véges<br />

bitsorozattal<br />

– Tökéletes pontossággal lehetetlen<br />

– Maximum megszámlálható részhalmazokat tudunk<br />

csak ábrázolni<br />

– A cél az „érdekes” számok minél jobb közelítése<br />

• Érdekesség: vannak olyan valós számok,<br />

amelyek számjegyeit logikai képtelenség<br />

számítógéppel előállítani<br />

– Kiszámíthatatlan számok, Alan Turing<br />

– Lásd: megállási probléma<br />

2005. október 13., 12:52 Adatábrázolás<br />

27. oldal


Fixpontos számábrázolás<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Használjuk a papíron megszokott tizedespontos ábrázolást<br />

– A „kettedespontot” képzeljük mindig ugyanazon két bitpozíció közé<br />

– Példák: (5+3-as ábrázolással, nyolcbites szavakkal)<br />

• 00110111 = (00110.111) 2<br />

= 6.875<br />

• 00000001 = (0.001) 2<br />

= 0.125<br />

• 00001000 = (1) 2<br />

= 1<br />

• 10101011 = -(01010.101) 2<br />

= -10.625 (kettes komplemens)<br />

• Viszonylag kényelmes ábrázolási mód<br />

– A reprezentált számok homogén eloszlásúak<br />

– Az összeadás/kivonás változatlan módon elvégezhető<br />

– A szorzás/osztás után normalizálni kell<br />

• Maja civilizáció<br />

– 20-as alapú, fixpontos számábrázolás<br />

2005. október 13., 12:52 Adatábrázolás<br />

28. oldal


Racionális számábrázolás<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Minden racionális szám felírható két egész szám hányadosaként<br />

• Ábrázoljuk a számlálót és a nevezőt külön-külön!<br />

• A négy alapművelet az ismert összefüggések alapján elvégezhető<br />

– (p/q) · (u/v) = pu / qv<br />

– (p/q) / (u/v) = pv / qu<br />

– (p/q) ± (u/v) = (pv ± qu) / qv<br />

• A műveletek után célszerű egyszerűsíteni a számláló és a nevező<br />

legnagyobb közös osztójával<br />

• Az elérhető pontosság a megengedhető szélességtől függ<br />

– Túlcsordulás esetén ügyes algoritmussal meg kell találni a<br />

legközelebbi ábrázolható számot<br />

– Gyakori a tetszőleges pontosságú egészek használata<br />

• Viszonylag művelet- és tárigényes számábrázolási mód<br />

2005. október 13., 12:52 Adatábrázolás<br />

29. oldal


Komplex számok ábrázolása<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Általában két külön szám ábrázolásával<br />

– Valós és képzetes részre bontás<br />

– Polárkoordinátás felírás<br />

• 2i alapú egzotikus számrendszer is használható<br />

– Számjegyek: 0, 1, 2, 3<br />

– Nincs szükség külön előjel használatára<br />

– Szorzás, osztás a valós számoknál „szokásos”<br />

algoritmussal elvégezhető<br />

– Lásd Knuth II.<br />

2005. október 13., 12:52 Adatábrázolás<br />

30. oldal


Lebegőpontos számábrázolás<br />

• Induljunk ki a számok „tudományos” jelöléséből:<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

– e {0, 1}: előjel<br />

a = (-1) e · m · 10 k<br />

– m [1, 10): mantissza, törtrész<br />

– k Z: kitevő, exponens<br />

– Példák: 3.14159 = (-1) 0 · 3.14159 · 10 0<br />

-2919.2 = (-1) 1 · 2.9192 · 10 3<br />

• A digitális számábrázoláshoz az (e, m, k) hármasokat<br />

fogjuk szabványos formában rögzíteni<br />

– A mantissza hosszától függ a pontosság<br />

• Babilóniai Birodalom: 60-as alapú lebegőpontos<br />

számrendszer, kitevő nélkül<br />

– A nullát ismerték, de csak számjegyek között volt rá szükség<br />

2005. október 13., 12:52 Adatábrázolás<br />

31. oldal


IEEE 754<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• 32 bites ábrázolás (egyszeres pontosság)<br />

– 1 bit előjel, 8 bit kitevő, 23 bit „szignifikáns”<br />

e kitevő+127 szignifikáns<br />

31 30<br />

23<br />

22<br />

– A kitevő -126 és 127 között lehet, 127 hozzáadásával<br />

kerül eltárolásra<br />

– A mantissza „kettedespont” előtti számjegye<br />

nemnulla számokra garantáltan egy, ezt nem tároljuk<br />

– Példa:<br />

154.1 ≈ (10011010.00011001100110011…) 2<br />

= (1.001101000011001100110011…) 2<br />

· 2 (111)<br />

= 01000011000110100001100110011001<br />

2005. október 13., 12:52 Adatábrázolás<br />

32. oldal<br />

0


IEEE 754<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A csupa nulla és csupa 1 bitből álló kitevő speciális<br />

jelentéssel bír<br />

– Kitevő és szignifikáns is 0: a nulla szám<br />

• Az előjel szerint -0, +0 számokat is reprezentálhatunk<br />

– Kitevő 0, szignifikáns nem 0: denormalizált szám<br />

• Alulcsordulás elkerülésére használják<br />

– Ha a kitevő 255, a szignifikáns 0: végtelen mennyiség<br />

• Az előjel a -∞ és a +∞ között tesz különbséget<br />

• 42/0 = +∞, -42/0 = -∞<br />

– Ha a kitevő 255, a szignifikáns nem 0: „nemszám” érték<br />

• NaN, Not a Number<br />

• Hibajelzésre szolgálnak, pl. 0/0 esetén<br />

• Dupla pontosság is definiált<br />

– 64 bit, 11 bit kitevő (1023-as eltolás), 52 bit mantissza<br />

2005. október 13., 12:52 Adatábrázolás<br />

33. oldal


Konverzió tizedes számrendszerből<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

e kitevő+127 szignifikáns<br />

31 30<br />

42.5<br />

0.625<br />

= (101010.1) 2<br />

= (1.010101) 2<br />

· 2 101 ; (101 + 1111111) 2<br />

= (10000100) 2<br />

= 01000010001010100000000000000000<br />

= (0.101) 2<br />

23<br />

22<br />

= (1.01) 2<br />

· 2 -1 ; (-1 + 1111111) 2<br />

= (01111110) 2<br />

= 00111111001000000000000000000000<br />

2005. október 13., 12:52 Adatábrázolás<br />

34. oldal<br />

0


Konverzió tízes számrendszerbe<br />

• 11000010101101100000000000000000 = ?<br />

Kitevő: 10000101 = (10000101) 2<br />

– (01111111) 2<br />

= (00000110) 2<br />

= 6<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

Szignifikáns: 01101100... = (1.01101100...) 2<br />

= 1.421875<br />

Eredmény: -1 · 1.421875 · 32 = -45.5<br />

• 00000000000000000000000000000001 = ?<br />

Normalizálatlan szám!<br />

0.000000000000000000001 · 2 -126<br />

= 2 -22 · 2 -126 = 2 -148<br />

≈ 2.8025969 · 10 -45<br />

Ez a legkisebb abszolútértékű reprezentáns<br />

• 01111111011111111111111111111111 = ?<br />

1.1111111111111111111111 · 2 127<br />

≈ 2 · 2 127 = 2 128 = 2.80259692 · 10 39<br />

Ez a legnagyobb abszolútértékű reprezentáns<br />

2005. október 13., 12:52 Adatábrázolás<br />

35. oldal


IEEE754 reprezentánsok sűrűségeloszlása<br />

Egységnyi hosszú intervallumba eső<br />

reprezentánsok száma<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

...<br />

Normalizált<br />

reprezentánsok<br />

-2 -123 -2 -124 -2 -125 -2 -126<br />

Normalizálatlan<br />

reprezentánsok<br />

0 2 -126 2 -125 2 -124 2 -123<br />

...<br />

2005. október 13., 12:52 Adatábrázolás<br />

36. oldal


A lebegőpontos ábrázolás problémái<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Sok véges tizedestörtnek végtelen a „kettedes” kifejtése<br />

– 1/5, 1/10, 1/100, stb.<br />

– Pénzügyi, számviteli alkalmazásokra nem jó (lásd BCD)<br />

• Mindig észben kell tartani, hogy közelítő<br />

mennyiségekkel dolgozunk<br />

– Szigorú egyenlőségvizsgálat szinte mindig hiba:<br />

f := 0.1; while not f = 10.0 do f := f + 0.1; end;<br />

– A fenti programkód végtelen ciklust eredményez!<br />

– Mindig kisebb/nagyobb relációt vizsgáljunk, vagy<br />

ε-sugarú környezettel hasonlítsunk:<br />

f := 0.1; while f < 10.0 do f := f + 0.1; end;<br />

f := 0.1; while f – ε > 10.0 or f + ε < 10.0 do f := f + 0.1; end;<br />

2005. október 13., 12:52 Adatábrázolás<br />

37. oldal


A lebegőpontos ábrázolás problémái<br />

• A számábrázolás tartománya nem homogén<br />

– Nullához közel nagyon sűrűek a reprezentánsok<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

– Ahogy növeljük az abszolútértéket, úgy csökken a pontosság<br />

• Két egymáshoz közeli számot kivonva egymásból<br />

romlik a pontosság<br />

– A mantissza elejéről kiesnek az azonos számjegyek<br />

– Ha nem vigyázunk, egészen rossz eredményt kapunk<br />

• Több nagyságrendben eltérő számokat összeadva a<br />

nagyobb szám „lenyeli” a kisebbet<br />

– Nem mindegy, hogy milyen sorrendben adunk egy számsorozatot!<br />

• Nullával közeli számmal osztva is hibát vezetünk be<br />

• A numerikus analízis nevű tudományág egyik feladata, hogy stabil<br />

algoritmusokat találjon, melyek elkerülik a fenti szituációkat<br />

2005. október 13., 12:52 Adatábrázolás<br />

38. oldal


Szimbolikus számábrázolás<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Egyelőre csak erre specializált matematikai<br />

programcsomagokban<br />

• A pontosan nem reprezentálható függvényeredmények<br />

helyett megőrizzük a kiszámolandó formulát, így<br />

dolgozunk tovább<br />

– Azonosságok segítségével egyszerűsítjük a képletet<br />

• √(x 2 + 2x + 1) = x + 1<br />

– Mesterséges intelligencia algoritmusok<br />

• Első alkalmazások: szimbolikus deriválás, Lisp,<br />

hatvanas évek<br />

• Manapság: „új matematika”<br />

– Mathematica, Maple<br />

2005. október 13., 12:52 Adatábrázolás<br />

39. oldal


Tartalomjegyzék<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

1. Egész számok ábrázolása<br />

2. Törtszámok ábrázolása<br />

3. Szövegek ábrázolása<br />

4. Digitális logika<br />

2005. október 13., 12:52 Adatábrázolás<br />

40. oldal


Karakterek, -halmazok, -kódolások<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Karakter: egy nyelvi szimbólumot, grafémát reprezentáló<br />

információegység<br />

– Példák: A ! 5 % Ж ق vagy akár a szóköz<br />

– Nem tartalmazza a megjelenítés pontos módját (a karakter alakját)<br />

– A különböző megjelenítési variációkat (pl. a, a, a) ugyanannak a<br />

karakternek tekintjük<br />

• Karakterhalmaz (kódkészlet): ezek valamely együttese<br />

• Karakterkódolás: a karakterhalmaz elemei és az őket<br />

reprezentáló bitsorozatok közötti hozzárendelés<br />

– Egy adott karakterhalmazhoz több különböző szabványos kódolás<br />

is tartozhat<br />

• Karakterek sorozatát sztringeknek vagy füzéreknek szokás<br />

hívni<br />

2005. október 13., 12:52 Adatábrázolás<br />

41. oldal


EBCDIC<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Az IBM „hagyományos” kódtáblázata<br />

– Lyukkártyák olvasható kódolása volt<br />

– Emberi szemmel is viszonylag könnyen leolvasható<br />

– Az IBM nagyszámítógépeken a mai napig használják<br />

• Nyolcbites kódolás, sok nemzeti és egyéb<br />

variáns<br />

– 95 közös kódpozíció<br />

• Jellegzetessége, hogy az angol ábécé 26<br />

betűjének kódpozíciói nem folytonosak<br />

– Az i/j és az r/s betűk közé más karakterek ékelődnek<br />

– Oka a lyukkártyás eredet<br />

2005. október 13., 12:52 Adatábrázolás<br />

42. oldal


EBCDIC<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

http://aspell.net/charsets/<br />

2005. október 13., 12:52 Adatábrázolás<br />

43. oldal


Emlékeztető: Lyukkártya<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• 187.25mm széles, 82.55mm magas (7.75''x3.25'')<br />

• A fenti kártyán, balról jobbra: betűk (A-Z),<br />

számjegyek (0-9) és speciális szimbólumok<br />

http://www.staff.ncl.ac.uk/roger.broughton/iomedia/pc.htm<br />

2005. október 13., 12:52 Adatábrázolás<br />

44. oldal


ASCII (ISO 646)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• American Standard Code for Information Interchange<br />

• 1963, a Bell cég távírógép-kódjaiból<br />

• Hétbites, 127 karaktert tartalmazó kódtábla<br />

– Angol ábécé, számjegyek, írásjegyek, maroknyi speciális karakter<br />

(\^_`|~)<br />

– Nyomtatási képpel rendelkező karakterek:<br />

!"#$%&'()*+,-./0123456789:;?<br />

@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_<br />

`abcdefghijklmnopqrstuvwxyz{|}~<br />

– Az első 32 kódpozíción ún. vezérlő karakterek találhatók<br />

• Többségük mára okafogyottá vált<br />

• Minden idők legsikeresebb informatikai szabványa<br />

– Az IBM nagyszámítógépeken kívül mindenhol ezt használják<br />

– Manapság a Unicode kezdi leváltani<br />

2005. október 13., 12:52 Adatábrázolás<br />

45. oldal


ASCII (ISO 646)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

http://aspell.net/charsets/<br />

2005. október 13., 12:52 Adatábrázolás<br />

46. oldal


ISO 8859<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Nyolcbites karakterkódolások ISO/IEC nemzetközi<br />

szabványa<br />

– ASCII kompatibilis, az első 127 jel megegyezik vele<br />

– Jelenleg 15 különböző kódlapot ír le<br />

– ISO 8859-1: Nyugat-európai kódkészlet (Latin-1)<br />

• A Latin-2 ő, ű helyén õ, ill. û áll, a magyar szövegek így is olvashatók,<br />

bár a rossz ékezetek szúrják a szemet<br />

– ISO 8859-2: Közép-európai kódkészlet (Latin-2)<br />

• Teljes magyar ábécé<br />

– ISO 8859-15: A Latin-1 második kiadása (Latin-9)<br />

• Euró karakter (€), egzotikusabb francia, finn és észt betűk<br />

– ISO 8859-16: A Latin-2 második kiadása (Latin-10)<br />

• Euró karakter, alsó idézőjelek<br />

• Sajnos az ű karakter kódpozíciója eltér a Latin-2-től<br />

2005. október 13., 12:52 Adatábrázolás<br />

47. oldal


ISO 8859-1 és -2<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

2005. október 13., 12:52 Adatábrázolás<br />

48. oldal


Unicode és UCS<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Universal Character Set, ISO/IEC 10646<br />

– Jelenleg mintegy százezer karaktert tartalmazó kódkészlet<br />

– Kb. 2 21 különböző karakterig bővíthető<br />

• Pontos érték: 2 20 + 2 16 = 0x10FFFF = 1114112 karakter<br />

– Minden élő (és sok holt) nyelv összes írásjele, matematikai<br />

szimbólumok, valamennyi korábbi karakterkészlet összes jele<br />

– Több-bájtos karakter-kódok<br />

• Unicode: ipari szabvány<br />

– Kezdetben jóval egyszerűbb és korlátozottabb volt<br />

– Mára a kettő teljesen kompatibilis<br />

– A Unicode szabványok részletes használati útmutatót,<br />

implementációs segédletet is adnak az egyes karakterekhez<br />

– Rendezési, megjelenítési, szerkesztési útmutatók<br />

2005. október 13., 12:52 Adatábrázolás<br />

49. oldal


Unicode kódtáblázat<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

http://www.ianalbert.com/misc/unichart.php<br />

2005. október 13., 12:52 Adatábrázolás<br />

50. oldal


Unicode és UCS<br />

• A Unicode általános, nemzetközi kódkészlet<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

– Latin ábécéktől a kínai írásjeleken át az egyiptomi<br />

hieroglifákig<br />

– Jellegzetesség, hogy az ékezetes karaktereket<br />

építőelemeikből egyesével is öszerakhatjuk<br />

– Igen kifinomult megjelenítési, szerkesztési, rendezési,<br />

konverziós szabályok<br />

• A karakterekhez a szabvány számértéket rendel<br />

– Jelölésük: U+kódpozíció; példa: 'A' = U+0041<br />

• A kódpozícióhoz különféle szabványos<br />

eljárásokkal rendelhetünk bitsorozatokat<br />

– UTF-8, UCS-2, UTF-16, UTF-32/UCS-4<br />

2005. október 13., 12:52 Adatábrázolás<br />

51. oldal


A Unicode kódok<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A 1114112 kódpozíciót a könnyebb kezelhetőség<br />

érdekében 17 db 65536 (2 16 ) kódot<br />

tartalmazó„síkra” (plane) osztották<br />

• A legelső síkba kerültek a leggyakoribb<br />

karakterek<br />

– Basic Multilingual Plane (BMP)<br />

– Ezen a karakterek reprezentációja a leggazdaságosabb<br />

– Egyes reprezentációk csak ezt az egy síkot támogatják<br />

• Az első 256 kódpozíció megegyezik a Latin-1<br />

kódtáblázat kiosztásával<br />

– Ebből következően az első 128 pozíció az ASCII<br />

2005. október 13., 12:52 Adatábrázolás<br />

52. oldal


Basic Multilingual Plane (BMP)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Az ábra minden négyzete 256 kódpozíciót takar:<br />

– Latin karakterek<br />

– Egyéb európai karakterek<br />

– Nyelvészeti karakterek<br />

– Közelkelet<br />

– Afrika<br />

– Dél-Ázsia<br />

– Kelet-Ázsia<br />

– Egységesített CJK<br />

– Ausztrália<br />

– Szimbólumok<br />

– Ékezet-építő karakterek<br />

– Tiltott (UTF-16), ill. privát felhasználás<br />

– Egyéb<br />

– Kiosztatatlan<br />

http://en.wikipedia.org/wiki/Basic_multilingual_plane<br />

2005. október 13., 12:52 Adatábrázolás<br />

53. oldal


UTF-32 / UCS-4<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Ötlet: minden Unicode karaktert reprezentáljunk a kódpozíciójával<br />

– Négy bájton kényelmesen elfér<br />

– A legegyszerűbb megoldás<br />

– Példa: az „Szőr” sztring kódjai:<br />

0x00000053 0x0000007A 0x00000151 0x00000072<br />

• Minden karaktert azonos hosszúságú bitsorozat reprezentál<br />

– Az ékezet-építő karakterek miatt így is előfordulhat, hogy egyetlen<br />

megjelenített szimbólumot több négybájtos karakteren ábrázolunk<br />

– Pl. az „ő” betűt az U+006F U+030B párral is megadhatjuk:<br />

0x00000053 0x0000007A 0x0000006F 0x0000030B 0x00000072<br />

• Hátrányai:<br />

– A reprezentáció függ az alkalmazott bájtsorrendtől<br />

– Viszonylag gazdaságtalan kódolás (32 bájt négy karakterért!)<br />

• Az extra biteket viszont különböző egyéb célokra használhatjuk<br />

– Nulla bájtokat tartalmaz, ami megzavarhatja a korábban írt programokat<br />

• Viszonylag ritkán használatos<br />

2005. október 13., 12:52 Adatábrázolás<br />

54. oldal


UTF-8<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• 1993, Ken Thompson, Rob Pike<br />

• Az egyes Unicode karaktereket 1-4 bájt hosszúságú<br />

bájtsorozatokra képezi<br />

– Az ASCII karakterek reprezentációja nem változik:<br />

0xxxxxxx<br />

– A BMP többi karaktere két vagy három bájt hosszú:<br />

110xxxxx 10xxxxxx<br />

1110xxxx 10xxxxxx 10xxxxxx<br />

– A többi 16 sík karakterei négybájtosak:<br />

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx<br />

(7 bit)<br />

(11 bit)<br />

(16 bit)<br />

(21 bit)<br />

– A karakterekhez a lehető legrövidebb sorozatot rendeljük<br />

– Az első bájt legmagasabb helyiértékű egyes bitjeinek száma határozza meg<br />

a sorozat hosszát<br />

– A további bájtok egyértelműen megkülönbeztethetőek a karakterkezdő<br />

bájtoktól<br />

2005. október 13., 12:52 Adatábrázolás<br />

55. oldal


UTF-8<br />

• Például a „Szőr” reprezentációja:<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

'S' = U+0053, 0x53 = (1010011) 2<br />

'z' = U+007A, 0x7A = (1111010) 2<br />

'ő' = U+0151, 0x0151 = (101010001) 2<br />

'r' = U+0072, 0x72 = (1110010) 2<br />

01010011 01111010 11000101 10010001 01110010<br />

0x53 0x7A 0xC5 0x91 0x72<br />

S z ő r<br />

2005. október 13., 12:52 Adatábrázolás<br />

56. oldal


UTF-8<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Előnyök<br />

– Bájtsorrend-független reprezentáció<br />

– Az U+0000 (0x00) karaktertől eltekintve egy karakter<br />

reprezentációjában sem fordul elő nulla bájt<br />

• A létező programok jó része számára így az UTF-8 szövegek<br />

kezelhetőek maradnak<br />

– Állapotmentes kódolás; ha hiba történik, a következő<br />

karaktertől egyértelműen folytatható a dekódolás<br />

• Hátrányok<br />

– A változó hossz miatt a sztringműveletek nehézkesebbek<br />

– Elvileg ugyanaz a karakter többféleképpen is kódolható volna<br />

• Pl. 00000001 =?= 11000000 10000001<br />

• A jelenlegi szabvány már tiltja a hosszabb forma elfogadását<br />

• Az adatátvitelben az UTF-8 kezdi felváltani az ASCII-t<br />

2005. október 13., 12:52 Adatábrázolás<br />

57. oldal


UTF-16 / UCS-2<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A C, C++, Java, C# programozási nyelvek<br />

„széles” karaktereinek reprezentációja<br />

• Az UTF-16 a BMP karaktereit egységesen 2<br />

bájton, a többi sík (ritka) karaktereit pedig 4<br />

bájton reprezentálja<br />

• A BMP karaktereinek számértéke megegyezik az<br />

Unicode kódpozíciójukkal<br />

– Például „Szőr”: 0x0053 0x007A 0x0151 0x0072<br />

• Ha csak a BMP karaktereit engedjük meg, az így<br />

kapott egyszerűsített kódolás az UCS-2<br />

2005. október 13., 12:52 Adatábrázolás<br />

58. oldal


UTF-16 / UCS-2<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Az UTF-16-ban a BMP-n kívül rekedt (2 20 db)<br />

kódpozíciót két duplabájtos kóddal ábrázoljuk<br />

– Surrogate pairs, „pótpárok”<br />

– A duplabájtos összetevők értéke 0xD800 és 0xDFFF közé esik<br />

• Ez egy 11 bit széles tartomány, amit két 10 bites részre osztunk:<br />

Felső fél:<br />

Alsó fél:<br />

110110xxxxxxxxxx<br />

110111xxxxxxxxxx<br />

• A BMP-ben ezekhez a pozíciókhoz nincs karakter rendelve<br />

• Az x-ek helyére szabadon választható 10+10 bit értéke az ábrázolandó<br />

karakter Unicode pozíciója mínusz 2 16<br />

– Példa: mükénéi Lineáris B „Nő” karakter: U+10081<br />

0x10081 – 0x10000 = 0x0081 = (0000000000 0010000001) 2<br />

(1101100000000000 1101110010000001) 2<br />

= 0xD800 0xDC81<br />

2005. október 13., 12:52 Adatábrázolás<br />

59. oldal


UTF-16 / UCS-2<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Előnyök:<br />

– A népszerű programozási nyelvek beépített támogatást adnak<br />

– Viszonylag gazdaságos kódolás<br />

– A hétköznapi használatban lévő karakterekre egységesen kétbájtos<br />

reprezentációhossz<br />

• Hátrányok:<br />

– A BMP-n kívüli karakterek változó hosszúságú kódolást<br />

eredményeznek<br />

– A konkrét reprezentáció függ az architektúra bájtsorrendjétől<br />

• UTF-16, UTF-16BE, UTF-16LE<br />

• A szövegeket bájtsorrend-jelző (BOM, Byte Order Mark) U+FEFF<br />

karakterrel szokás kezdeni („nulla hosszúságú nem törhető térköz”)<br />

• Az U+FFFE kódpozícióhoz nincs karakter rendelve, így egyértelmű a<br />

döntés<br />

• Az UTF-16-t gyakran használják belső ábrázoláshoz<br />

2005. október 13., 12:52 Adatábrázolás<br />

60. oldal


Tartalomjegyzék<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

1. Egész számok ábrázolása<br />

2. Tört számok ábrázolása<br />

3. Szövegek ábrázolása<br />

4. Digitális logika<br />

2005. október 13., 12:52 Adatábrázolás<br />

61. oldal


Digitális áramkörök, logikai kapuk<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A digitális áramkörökben csupán két logikai<br />

értéket különböztetünk meg<br />

– Pl. 0V := 0 (hamis), 5V := 1 (igaz)<br />

• A logikai kapuk egyszerű digitális áramkörök,<br />

melyeket építőkockaként használhatunk<br />

bonyolultabb áramkörök készítéséhez<br />

• A kapuk összeállításához valamilyen<br />

kapcsolóként viselkedő áramköri<br />

elemre van szükség<br />

– Relé, vákumcső, tranzisztor<br />

2005. október 13., 12:52 Adatábrázolás<br />

62. oldal<br />

B<br />

C<br />

E


NEM kapu (NOT)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A NEM kapu a bemenetére érkező jel<br />

ellenkezőjét állítja elő a kimenetén<br />

– „Inverter” avagy „fordító”<br />

U be<br />

+U cc<br />

U ki<br />

2005. október 13., 12:52 Adatábrázolás<br />

63. oldal<br />

A<br />

A X<br />

0 1<br />

1 0<br />

X


NEM-ÉS kapu (NAND)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A NAND kapu értéke mindig 1, kivéve ha<br />

mindkét bemenete is 1<br />

U 1<br />

U 2<br />

+U cc<br />

U ki<br />

2005. október 13., 12:52 Adatábrázolás<br />

64. oldal<br />

A<br />

B<br />

A B X<br />

0 0 1<br />

0 1 1<br />

1 0 1<br />

1 1 0<br />

X


NEM-VAGY kapu (NOR)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A NOR kapu értéke csak akkor 1, ha mindkét<br />

bemenete 0<br />

U 1<br />

+U cc<br />

U 2<br />

U ki<br />

2005. október 13., 12:52 Adatábrázolás<br />

65. oldal<br />

A<br />

B<br />

A B X<br />

0 0 1<br />

0 1 0<br />

1 0 0<br />

1 1 0<br />

X


ÉS kapu (AND)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Az ÉS kapu csak akkor ad 1-es értéket, ha<br />

mindkét bemenete egyaránt 1-es<br />

U 1<br />

U 2<br />

+U cc<br />

+U cc<br />

U ki<br />

2005. október 13., 12:52 Adatábrázolás<br />

66. oldal<br />

A<br />

B<br />

A B X<br />

0 0 0<br />

0 1 0<br />

1 0 0<br />

1 1 1<br />

X


VAGY kapu (OR)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A VAGY kapu kimenetére akkor kerül 1-es jel,<br />

ha legalább az egyik bemenete 1-es<br />

U 1<br />

+U cc<br />

U 2<br />

+U cc<br />

2005. október 13., 12:52 Adatábrázolás<br />

67. oldal<br />

U ki<br />

A<br />

B<br />

A B X<br />

0 0 0<br />

0 1 1<br />

1 0 1<br />

1 1 1<br />

X


Kizáró VAGY kapu (XOR)<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Akkor kerül 1 a kimenetére, ha pontosan egy<br />

bemenete 1-es<br />

A<br />

B<br />

X<br />

A B X<br />

0 0 0<br />

0 1 1<br />

1 0 1<br />

1 1 0<br />

2005. október 13., 12:52 Adatábrázolás<br />

68. oldal


Boole-függvények<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Boole-függvényeknek nevezzük az egy vagy több<br />

igazságértékről igazságértékre képező<br />

függvényeket<br />

– A Boole-függvényeket egyértelműen megadhatjuk, ha felírjuk,<br />

hogy mely paraméterértékekre milyen értéket vesznek fel<br />

(igazságtábla, 2 n számú sor)<br />

• Bármely Boole-függvényhez készíthető egy<br />

NOT, OR, AND kapukból álló, őt előállítható<br />

áramkör<br />

– Az igazságtábla 1-es értékű soraihoz rendeljünk AND<br />

kapukat a megfelelően beinvertált bemenetekkel, majd kössük<br />

őket össze OR kapuval<br />

2005. október 13., 12:52 Adatábrázolás<br />

69. oldal


Boole-függvények<br />

• Pl. Többségi függvény:<br />

A B C A B C<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

A B C M<br />

0 0 0 0<br />

0 0 1 0<br />

0 1 0 0<br />

0 1 1 1<br />

1 0 0 0<br />

1 0 1 1<br />

1 1 0 1<br />

1 1 1 1<br />

A<br />

B<br />

C<br />

2005. október 13., 12:52 Adatábrázolás<br />

70. oldal<br />

ABC<br />

ABC<br />

ABC<br />

ABC<br />

M


NAND (és NOR) áramkörök<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• A NAND és NOR kapuk egymagukban is<br />

képesek a többi kapu megvalósítására<br />

– NOT: egyszerűen kössük össze a bemeneteket<br />

– AND, OR:<br />

A<br />

B<br />

A<br />

B<br />

A&B<br />

A&B<br />

2005. október 13., 12:52 Adatábrázolás<br />

71. oldal<br />

A<br />

B<br />

A<br />

B<br />

A|B<br />

A|B


Példa: 1 bites összeadó áramkör<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Adjuk össze A-t és B-t!<br />

– Az összeg kerüljön S-be<br />

– Az esetleges túlcsordulást (átvitelt) jelezzük C-ben<br />

A<br />

B<br />

C<br />

A B S C<br />

0 0 0 0<br />

0 1 1 0<br />

1 0 1 0<br />

1 1 0 1<br />

2005. október 13., 12:52 Adatábrázolás<br />

72. oldal<br />

S


Példa: Teljes összeadó áramkör<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Ha többbites összeadót szeretnénk építeni,<br />

bemenő átvitelre is szükség van:<br />

A<br />

B<br />

C'<br />

C<br />

A B C S C'<br />

0 0 0 0 0<br />

0 0 1 1 0<br />

0 1 0 1 0<br />

0 1 1 0 1<br />

1 0 0 1 0<br />

1 0 1 0 1<br />

1 1 0 0 1<br />

1 1 1 1 1<br />

2005. október 13., 12:52 Adatábrázolás<br />

73. oldal<br />

S


Példa: többites összeadó<br />

Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />

• Ha több bites számokat szeretnénk összeadni,<br />

egyszerűen egymás mellé kötjük a teljes<br />

összeadóinkat:<br />

C<br />

A3<br />

Teljes<br />

összeadó<br />

B3<br />

C2<br />

A2<br />

Teljes<br />

összeadó<br />

B2<br />

Teljes<br />

összeadó<br />

Teljes<br />

összeadó<br />

2005. október 13., 12:52 Adatábrázolás<br />

74. oldal<br />

C1<br />

A1<br />

B1<br />

S3 S2 S1 S0<br />

C0<br />

A0<br />

B0

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!