Architektúrák és operációs rendszerek: Adatreprezentáció Balogh Ádám Lőrentey Károly Eötvös Loránd Tudományegyetem Informatikai Kar Algoritmusok és Alkalmazásaik Tanszék
Tartalomjegyzék 1. Egész számok ábrázolása 2. Törtszámok ábrázolása 3. Szövegek ábrázolása 4. Digitális logika 2. oldal
Helyi értékes számrendszerek Emlékeztetőül a tízes számrendszer: Általánosítás: 273.43 = 2 10 2 + 7 10 1 + 3 10 0 + 4 10-1 + 3 10-2 Legyen b > 1 a számrendszer pozitív egész alapszáma (bázisa) Legyenek a i { 0,, b 1 } számjegyek Az ( a 2 a 1 a 0.a -1 a -2...) b, b-számrendszerbeli szám számértéke: Példák: + a 2 b 2 + a 1 b 1 + a 0 + a -1 b -1 + a -2 b -2 + = Σa i b i (453.82) 9 = 4 81 + 5 9 + 3 + 8/9 + 2/81 = 372 + 74/81 372.91358 (242.13) 5 = 2 25 + 4 5 + 2 + 1/5 + 3/25 = 72 + 8/25 = 72.32 (11021.121) 3 = 1 81 + 1 27 + 2 3 + 1 + 1/3 + 2/9 + 1/27 115.592 3. oldal
Helyi értékes számrendszerek A tíznél nagyobb alapszámú számrendszerek leírásához a 0-9 számjegyeket az angol ábécé betűivel egészítjük ki: (3E8) 16 = 3 256 + 14 16 + 8 = 1000 (BEEF) 16 = 11 4096 + 14 256 + 14 16 + 15 = 48879 (CICA) 20 = 12 8000 + 18 400 + 12 20 + 10 = 103450 Vigyázat, a jelölés nem egységes! Ahány ember, annyi jelölés Gyakran csak a szövegkörnyezetből derül ki az alapszám (BEEF) 16 helyett általában 0xBEEF-et írnak (C nyelv) (7342) 8 helyett gyakran 07342-t írnak (szintén C nyelv) 4. oldal
Átszámolás új alapszámra A számrendszerek között a cél-alapszámmal történő sorozatos maradékos osztással tudunk átszámolni A legkisebb helyiértéktől kezdve kapjuk meg a számjegyeket: jobbról balra haladunk Az osztás maradéka lesz az eredmény következő számjegye A hányadost ismét leosztjuk Addig ismételjük, míg nullát nem kapunk 5. oldal
Átszámolási példa Írjuk át 1000-et nyolcas alapra! 1000 div 8 = 125 125 div 8 = 15 15 div 8 = 1 1 div 8 = 0 1000 mod 8 = 0 125 mod 8 = 5 15 mod 8 = 7 1 mod 8 = 1 (vége) Eredmény: 1000 = (1750) 8 6. oldal
Nevezetes számrendszerek Tízes számrendszer Ezt szoktuk meg, ezt szeretjük Az ujjaink számától eltekintve kevés praktikus haszna van Hatos, tizenkettes stb. számrendszerek Hagyományos mértékegységrendszerek Tucat Könnyű harmadolhatóság Hatvanas számrendszer Babilóniai eredet Időmérés, trigonometria (fokok/órák, percek, másodpercek) Kettes (bináris) számrendszer Számjegyek: bitek (0, 1) Tizenhatos számrendszer Számjegyek: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F A nyers bináris adatok leggyakoribb megjelenítési formája Nyolcas számrendszer A tizenhatos régimódi alternatívája Hatvannégyes számrendszer Adatátvitel (base64 kódolás, email mellékletek) 7. oldal
Érdekesség: egzotikus számrendszerek Negatív alapú számrendszerek Ugyanezen képlet alapján A számjegyek ugyanazok, mint a pozitív megfelelőnél Pl: (18005) -10 = 2005; (2015) -10 = -2005; Nincs szükség előjelre! Valós alapú számrendszerek Pl. 2 alapú számrendszer Általában csak a 0, 1 számjegyeket megengedve Az egész számok kifejtése általában végtelen hosszú Kiegyensúlyozott ternáris számrendszer Hármas alap, -1, 0, +1 számjegyek ( tritek ) Sok szép, szimmetrikus tulajdonság A binárishoz hasonlóan könnyű aritmetika Szovjet kísérleti számítógépek alkalmazták, ma sajnos nincs használatban, pedig megépíteni is könnyű 8. oldal
Számábrázolás feladata Feladat: számhalmazokat ügyes kódolással bitsorozattal ábrázolni A bitsorozat hossza általában előre adott, rögzített Neve: szóhossz, n-nel fogjuk jelölni n a gyakorlatban általában 8, 16, 32 vagy 64 Így véges számú (2 n db) különböző számot írhatunk le Ugyanaz a bitsorozat más és mást jelenthet a különböző megoldásokban Így jelöljük a bitsorozatot: b n-1 b 2 b 1 b 0 Példa: 01101011 (vajon mit jelent?) 9. oldal
Nemnegatív egész számok ábrázolása Triviális feladat, egyszerűen használjuk a bináris számrendszerbeli átírás számjegyeit A kettes számrendszer az informatika számrendszere Leibniz (1703) világított rá először Neumann János tette általánossá alkalmazását Példák: 00000000 := (0) 2 = 0 01101011 := (1101011) 2 = 107 11111111 := (11111111) 2 = 255 Ábrázolható számtartomány: [0.. 2 n -1] 10. oldal
Néhány kerek szám 2 0 = 1 2 1 = 2 2 2 = 4 2 3 = 8 2 4 = 16 2 5 = 32 2 6 = 64 2 7 = 128 2 8 = 256 2 9 = 512 2 10 = 1024 2 11 = 2048 2 12 = 4096 2 13 = 8192 2 14 = 16384 2 15 = 32768 2 16 = 65536 2 31 = 2147483648 2 32 = 4294967296 2 64 = 18446744073709551616 2 128 = 3402823669209 3846346337460 7431768211456 11. oldal
SI Informatikai mennyiségprefixek kilobyte (kb) 10 3 kibibyte (KiB) 2 10 megabyte (MB) 10 6 gigabyte (GB) 10 9 terabyte (TB) 10 12 petabyte (PB) 10 15 exabyte (EB) 10 18 zettabyte (YB) 10 21 yottabyte (YB) 10 24 mebibyte (MiB) 2 20 gibibyte (GiB) 2 30 tebibyte (TiB) 2 40 pebibyte (PiB) 2 50 exibyte (EiB) 2 60 A gyakorlatban általában kettőhatványértelemben használjuk a baloldali jelöléseket is 12. oldal
Előjelbites számábrázolás Hogyan ábrázoljunk negatív számokat? Ötlet: a legnagyobb helyiértékű bitet használjuk fel az előjel ábrázolására Ha b n értéke 0, akkor a sorozat értéke (b n-1 b 2 b 1 b 0 ) 2, egyébként -(b n-1 b 2 b 1 b 0 ) 2 Példák: 00000000 := (0000000) 2 = 0 10000000 := -(0000000) 2 = 0 01101011 := (1101011) 2 = 107 10000001 := -(0000001) 2 = -1 01111111 := (1111111) 2 = 127 11111111 := -(1111111) 2 = -127 Ábrázolható számtartomány: [-2 n-1-1.. 2 n-1-1] Gépi feldolgozásra kellemetlen, kényelmetlen ábrázolás: Dupla nulla; emellett a nullából visszalépve váratlan ugrás történik Összeadás, kivonás nehézkes, az előjelbitet figyelembe kell venni 13. oldal
Egyes komplemens ábrázolás Az előjelbitet továbbra is fenntartjuk, de a negatív számokat úgy ábrázoljuk, hogy az abszolútértékük valamennyi bitjének értékét az ellenkezőjére állítjuk Ezzel megszűnik a 0000 és az 1111 sorozatok közötti kellemetlen ugrás, jobban kezeljük tehát az alulcsordulást Példák: 00000000 := (0000000) 2 = 0 10000000 := -(01111111) 2 = -127 01101011 := (1101011) 2 = 107 10010100 := -(01101011) 2 = -107 01111111 := (1111111) 2 = 127 11111111 := -(00000000) 2 = 0 Ábrázolható számtartomány: [-2 n-1-1.. 2 n-1-1] (mint előbb) Használata mára szinte teljesen kikopott a gyakorlatból A nullát továbbra is duplán ábrázoljuk! 14. oldal
Kettes komplemens számábrázolás Kézenfekvő javítás a két nullaérték összevonása A negatív számokat egyszerűen ábrázoljuk úgy, hogy nullából egy pozitív számot kivonva hagyjuk alulcsordulni az eredményt Pontos leírás: a -k szám ábrázolásához először k bináris reprezentációjának komplemensét képezzük, majd az így kapott számhoz hozzáadunk 1-et Példák: 00000000 := (0) 2 = 0 10000000 := -(01111111) 2 = -(10000000) 2 = -128 01101011 := (1101011) 2 = 107 10010100 := -(10010011) 2 = -(1101100) 2 = -108 01111111 := -(0) 2 = 127 11111111 := -(1) 2 = -1 Ábrázolható számtartomány: [-2 n-1.. 2 n-1-1] Ez szinte valamennyi mai számítógép-architektúra belső számábrázolási módszere 15. oldal
Kettes komplemens számábrázolás Összeadás, kivonás közben nem kell előjelekkel bíbelődni: Összeadáskor egyszerűen összeadjuk a számokat Kivonáskor megváltoztatjuk a kivonandó előjelét (komplemens+1), majd egyszerűen összeadunk Példa: Mennyi 45 23? 1. Számábrázolás 45 = 00101101, 23 = 00010111 2. A kivonandó előjelváltása -23 = 11101001 3. Összeadás 45 23 = 45 + (-23) 00101101 + 11101001 = 00010110 (túlcsordulást levágva) 4. Visszaírás tizedes alakba 00010110 = 22 16. oldal
Bájtsorrend A különböző processzorok más és más sorrendben tárolják a memóriában az egész számokat reprezentáló bájtsorozatokat A választás önkényes, egyik megoldás sem egyértelműen jobb a többinél Big-endian: A legmagasabb helyiértékű bájt kerül a legkisebb memóriacímre 1144201745 = 0x44332211 = 44 33 22 11 Motorola 68000, SPARC, System/370 Előnye: könnyen olvasható, érthető Little-endian: A legkisebb helyiértékű bájt kerül az első címre 1144201745 = 0x44332211 = 11 22 33 44 Intel x86, MOS Technology 6502, DEC VAX Előnye: a szó bájtokra vagy duplabájtokra bontásakor a kisebb helyiértékű részek kisebb címeken lesznek megtalálhatók, ami valamivel intuitívebb Az elnevezéseket illetően lásd Swift Gulliver utazásait 17. oldal
Bájtsorrend Egyes processzorok esetében a bájtsorrend menet közben konfigurálható ARM, PowerPC, DEC Alpha, MIPS, PA-RISC, IA64 (Itanium) Régebbi architektúrákon vegyes bájtsorrend is előfordult (middle-endian) PDP-11: 0x44332211 = 33 44 11 22 Architektúrák közötti adatátvitelkor gondoskodni kell alkalmas bájtsorrend-konverziókról Ha erről megfeledkezünk, értelmetlen adatokat kapunk Igen gyakori, kellemetlen hibaforrás Az internet protokollok egységesen big-endian ábrázolást rögzítenek 18. oldal
Binary Coded Decimal (BCD) Gyakran van szükség tízes számrendszerbeli számok ábrázolására Pl. számviteli rendszerek A bináris ábrázolás használható volna, de az oda-vissza konverzió rontaná a hatékonyságot Ötlet: a tízes alapú számaink számjegyeit kódoljuk egy-egy négyes bitcsoportban! 0 = 0000 2 = 0010 1 = 0001 3 = 0011 4 = 0100 5 = 0101 6 = 0110 7 = 0111 8 = 1000 9 = 1001 A fennmaradó hat kódpozícióhoz nem rendelünk értéket, vagy pl. előjel jelölésére használjuk A reprezentációhoz négyes bitcsoportokra osztjuk a bitsorozatot Példa: 4255 = 0100001001010101 (n = 16) Ábrázolható számtartomány: [0.. 10 n/4 ] 19. oldal
Bigints, tetszőleges pontosság Ha nem férünk el egy szóban, rakjunk több szót egymás mellé Az elemi műveletek úgy végezhetők, mintha 2 n alapú számrendszerben dolgoznánk, és a szavak volnának a számjegyeink Az összeadó/szorzótáblát a gép elemi műveletei implementálják A tulajdonképpeni műveleteket kézzel programozzuk be A reprezentálható számtartomány a memóriamérettől függ, gyakorlatilag korlátlan 20. oldal
Gray-kód Frank Gray, Bell Labs, 1953 Bináris számrendszer, melyben az egymás utáni értékek csupán egy bitben különböznek egymástól Motiváció: (mechanikus) kapcsolók nem tudnak pontosan egyszerre váltani, ezért kapcsolás közben a belőlük épített számlálók egy rövid ideig rossz értéket látszanak felvenni A Gray-kód használata elkerüli a dupla kapcsolásokat, így a hibaforrás meszűnik Számlálás céljára használatos (+1 művelet) 21. oldal
Gray-kód előállítása Ábrázolási tartomány: nemnegatív egészek, [0..2 n ] n szélességű Gray-sorozatok rekurzív definíciója: Ha n = 1, akkor a sorozat: {0, 1} Egyébként az n széles sorozatot az n 1 széles sorozatból állítjuk elő Először az n-1-sorozat minden eleme elé írjunk nullát Majd az így kapott sorozat után írjuk le az n-1-sorozat megfordítottját, minden elem elé egy 1-est írva Példák: n = 2: {00, 01, 11, 10} n = 3: {000, 001, 011, 010, 110, 111, 101, 100} 22. oldal
5 széles Gray-sorozat 00000 01100 11000 10100 00001 01101 11001 10101 00011 01111 11011 10111 00010 01110 11010 10110 00110 01010 11110 10010 00111 01011 11111 10011 00101 01001 11101 10001 00100 01000 11100 10000 23. oldal
Gray-kód alkalmazásai Kapcsolókkal működő adatátviteli szerkezeteknél a mai napig használják Kombinatorikus programozási feladatok Pl. soroljuk fel egy H halmaz összes részhalmazát Ha a k. bit 1, akkor az aktuális részhalmaz tartalmazza H k. elemét Hanoi tornyai probléma Rendeljük a k. bitet a k. koronghoz Ha a Gray-sorozat következő elemében a k. bit változott, akkor azt a korongot kell mozgatni a következő lépésben 24. oldal
Linear Feedback Shift Register (LFSR) Pszeudovéletlen számsorozatokat is használhatunk számlálásra Egy lináris visszacsatolású eltolóregiszter ügyes visszacsatolófüggvénnyel igen hosszú ciklusú, véletlennek látszó bitsorozatot generál A leggyorsabb számlálók Közvetlenül hardverben építhetők Rengeteg érdekes alkalmazás Kriptográfia 1 0 0 1 1 0 0 0 1 0 1 1 0 0 0 1 Visszacsatolás GPS (minden műhold saját, 1023 bit hosszú szekvenciát generál) Digitális televíziózás A bitfolyam zavaró szabályosságainak elfedésére 0 25. oldal 1 1 XOR kapuk Kimenet
Tartalomjegyzék 1. Egész számok ábrázolása 2. Törtszámok ábrázolása 3. Szövegek ábrázolása 4. Digitális logika 26. oldal
Törtszámok ábrázolása A cél a valós számok ábrázolása véges bitsorozattal Tökéletes pontossággal lehetetlen Maximum megszámlálható részhalmazokat tudunk csak ábrázolni A cél az érdekes számok minél jobb közelítése Érdekesség: vannak olyan valós számok, amelyek számjegyeit logikai képtelenség számítógéppel előállítani Kiszámíthatatlan számok, Alan Turing Lásd: megállási probléma 27. oldal
Fixpontos számábrázolás Használjuk a papíron megszokott tizedespontos ábrázolást A kettedespontot képzeljük mindig ugyanazon két bitpozíció közé Példák: (5+3-as ábrázolással, nyolcbites szavakkal) 00110111 = (00110.111) 2 = 6.875 00000001 = (0.001) 2 = 0.125 00001000 = (1) 2 = 1 10101011 = -(01010.101) 2 = -10.625 (kettes komplemens) Viszonylag kényelmes ábrázolási mód A reprezentált számok homogén eloszlásúak Az összeadás/kivonás változatlan módon elvégezhető A szorzás/osztás után normalizálni kell Maja civilizáció 20-as alapú, fixpontos számábrázolás 28. oldal
Racionális számábrázolás Minden racionális szám felírható két egész szám hányadosaként Ábrázoljuk a számlálót és a nevezőt külön-külön! A négy alapművelet az ismert összefüggések alapján elvégezhető (p/q) (u/v) = pu / qv (p/q) / (u/v) = pv / qu (p/q) ± (u/v) = (pv ± qu) / qv A műveletek után célszerű egyszerűsíteni a számláló és a nevező legnagyobb közös osztójával Az elérhető pontosság a megengedhető szélességtől függ Túlcsordulás esetén ügyes algoritmussal meg kell találni a legközelebbi ábrázolható számot Gyakori a tetszőleges pontosságú egészek használata Viszonylag művelet- és tárigényes számábrázolási mód 29. oldal
Komplex számok ábrázolása Általában két külön szám ábrázolásával Valós és képzetes részre bontás Polárkoordinátás felírás 2i alapú egzotikus számrendszer is használható Számjegyek: 0, 1, 2, 3 Nincs szükség külön előjel használatára Szorzás, osztás a valós számoknál szokásos algoritmussal elvégezhető Lásd Knuth II. 30. oldal
Lebegőpontos számábrázolás Induljunk ki a számok tudományos jelöléséből: e {0, 1}: előjel a = (-1) e m 10 k m [1, 10): mantissza, törtrész k Z: kitevő, exponens Példák: 3.14159 = (-1) 0 3.14159 10 0-2919.2 = (-1) 1 2.9192 10 3 A digitális számábrázoláshoz az (e, m, k) hármasokat fogjuk szabványos formában rögzíteni A mantissza hosszától függ a pontosság Babilóniai Birodalom: 60-as alapú lebegőpontos számrendszer, kitevő nélkül A nullát ismerték, de csak számjegyek között volt rá szükség 31. oldal
IEEE 754 32 bites ábrázolás (egyszeres pontosság) 1 bit előjel, 8 bit kitevő, 23 bit szignifikáns e kitevő+127 szignifikáns 31 30 23 22 A kitevő -126 és 127 között lehet, 127 hozzáadásával kerül eltárolásra A mantissza kettedespont előtti számjegye nemnulla számokra garantáltan egy, ezt nem tároljuk Példa: 154.1 (10011010.00011001100110011 ) 2 = (1.001101000011001100110011 ) 2 2 (111) = 01000011000110100001100110011001 32. oldal 0
IEEE 754 A csupa nulla és csupa 1 bitből álló kitevő speciális jelentéssel bír Kitevő és szignifikáns is 0: a nulla szám Az előjel szerint -0, +0 számokat is reprezentálhatunk Kitevő 0, szignifikáns nem 0: denormalizált szám Alulcsordulás elkerülésére használják Ha a kitevő 255, a szignifikáns 0: végtelen mennyiség Az előjel a - és a + között tesz különbséget 42/0 = +, -42/0 = - Ha a kitevő 255, a szignifikáns nem 0: nemszám érték NaN, Not a Number Hibajelzésre szolgálnak, pl. 0/0 esetén Dupla pontosság is definiált 64 bit, 11 bit kitevő (1023-as eltolás), 52 bit mantissza 33. oldal
Konverzió tizedes számrendszerből e kitevő+127 szignifikáns 31 30 42.5 0.625 = (101010.1) 2 = (1.010101) 2 2 101 ; (101 + 1111111) 2 = (10000100) 2 = 01000010001010100000000000000000 = (0.101) 2 23 22 = (1.01) 2 2-1 ; (-1 + 1111111) 2 = (01111110) 2 = 00111111001000000000000000000000 34. oldal 0
Konverzió tízes számrendszerbe 11000010101101100000000000000000 =? Kitevő: 10000101 = (10000101) 2 (01111111) 2 = (00000110) 2 = 6 Szignifikáns: 01101100... = (1.01101100...) 2 = 1.421875 Eredmény: -1 1.421875 32 = -45.5 00000000000000000000000000000001 =? Normalizálatlan szám! 0.000000000000000000001 2-126 = 2-22 2-126 = 2-148 2.8025969 10-45 Ez a legkisebb abszolútértékű reprezentáns 01111111011111111111111111111111 =? 1.1111111111111111111111 2 127 2 2 127 = 2 128 = 2.80259692 10 39 Ez a legnagyobb abszolútértékű reprezentáns 35. oldal
IEEE754 reprezentánsok sűrűségeloszlása Egységnyi hosszú intervallumba eső reprezentánsok száma... Normalizált reprezentánsok -2-123 -2-124 -2-125 -2-126 Normalizálatlan reprezentánsok 0 2-126 2-125 2-124 2-123... 36. oldal
A lebegőpontos ábrázolás problémái Sok véges tizedestörtnek végtelen a kettedes kifejtése 1/5, 1/10, 1/100, stb. Pénzügyi, számviteli alkalmazásokra nem jó (lásd BCD) Mindig észben kell tartani, hogy közelítő mennyiségekkel dolgozunk Szigorú egyenlőségvizsgálat szinte mindig hiba: f := 0.1; while not f = 10.0 do f := f + 0.1; end; A fenti programkód végtelen ciklust eredményez! Mindig kisebb/nagyobb relációt vizsgáljunk, vagy ε-sugarú környezettel hasonlítsunk: f := 0.1; while f < 10.0 do f := f + 0.1; end; f := 0.1; while f ε > 10.0 or f + ε < 10.0 do f := f + 0.1; end; 37. oldal
A lebegőpontos ábrázolás problémái A számábrázolás tartománya nem homogén Nullához közel nagyon sűrűek a reprezentánsok Ahogy növeljük az abszolútértéket, úgy csökken a pontosság Két egymáshoz közeli számot kivonva egymásból romlik a pontosság A mantissza elejéről kiesnek az azonos számjegyek Ha nem vigyázunk, egészen rossz eredményt kapunk Több nagyságrendben eltérő számokat összeadva a nagyobb szám lenyeli a kisebbet Nem mindegy, hogy milyen sorrendben adunk egy számsorozatot! Nullával közeli számmal osztva is hibát vezetünk be A numerikus analízis nevű tudományág egyik feladata, hogy stabil algoritmusokat találjon, melyek elkerülik a fenti szituációkat 38. oldal
Szimbolikus számábrázolás Egyelőre csak erre specializált matematikai programcsomagokban A pontosan nem reprezentálható függvényeredmények helyett megőrizzük a kiszámolandó formulát, így dolgozunk tovább Azonosságok segítségével egyszerűsítjük a képletet (x 2 + 2x + 1) = x + 1 Mesterséges intelligencia algoritmusok Első alkalmazások: szimbolikus deriválás, Lisp, hatvanas évek Manapság: új matematika Mathematica, Maple 39. oldal
Tartalomjegyzék 1. Egész számok ábrázolása 2. Törtszámok ábrázolása 3. Szövegek ábrázolása 4. Digitális logika 40. oldal
Karakterek, -halmazok, -kódolások Karakter: egy nyelvi szimbólumot, grafémát reprezentáló információegység Példák: A! 5 % Ж ق vagy akár a szóköz Nem tartalmazza a megjelenítés pontos módját (a karakter alakját) A különböző megjelenítési variációkat (pl. a, a, a) ugyanannak a karakternek tekintjük Karakterhalmaz (kódkészlet): ezek valamely együttese Karakterkódolás: a karakterhalmaz elemei és az őket reprezentáló bitsorozatok közötti hozzárendelés Egy adott karakterhalmazhoz több különböző szabványos kódolás is tartozhat Karakterek sorozatát sztringeknek vagy füzéreknek szokás hívni 41. oldal
EBCDIC Az IBM hagyományos kódtáblázata Lyukkártyák olvasható kódolása volt Emberi szemmel is viszonylag könnyen leolvasható Az IBM nagyszámítógépeken a mai napig használják Nyolcbites kódolás, sok nemzeti és egyéb variáns 95 közös kódpozíció Jellegzetessége, hogy az angol ábécé 26 betűjének kódpozíciói nem folytonosak Az i/j és az r/s betűk közé más karakterek ékelődnek Oka a lyukkártyás eredet 42. oldal
EBCDIC http://aspell.net/charsets/ 43. oldal
Emlékeztető: Lyukkártya 187.25mm széles, 82.55mm magas (7.75''x3.25'') A fenti kártyán, balról jobbra: betűk (A-Z), számjegyek (0-9) és speciális szimbólumok http://www.staff.ncl.ac.uk/roger.broughton/iomedia/pc.htm 44. oldal
ASCII (ISO 646) American Standard Code for Information Interchange 1963, a Bell cég távírógép-kódjaiból Hétbites, 127 karaktert tartalmazó kódtábla Angol ábécé, számjegyek, írásjegyek, maroknyi speciális karakter (\^_` ~) Nyomtatási képpel rendelkező karakterek:!"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ `abcdefghijklmnopqrstuvwxyz{ }~ Az első 32 kódpozíción ún. vezérlő karakterek találhatók Többségük mára okafogyottá vált Minden idők legsikeresebb informatikai szabványa Az IBM nagyszámítógépeken kívül mindenhol ezt használják Manapság a Unicode kezdi leváltani 45. oldal
ASCII (ISO 646) http://aspell.net/charsets/ 46. oldal
ISO 8859 Nyolcbites karakterkódolások ISO/IEC nemzetközi szabványa ASCII kompatibilis, az első 127 jel megegyezik vele Jelenleg 15 különböző kódlapot ír le ISO 8859-1: Nyugat-európai kódkészlet (Latin-1) A Latin-2 ő, ű helyén õ, ill. û áll, a magyar szövegek így is olvashatók, bár a rossz ékezetek szúrják a szemet ISO 8859-2: Közép-európai kódkészlet (Latin-2) Teljes magyar ábécé ISO 8859-15: A Latin-1 második kiadása (Latin-9) Euró karakter ( ), egzotikusabb francia, finn és észt betűk ISO 8859-16: A Latin-2 második kiadása (Latin-10) Euró karakter, alsó idézőjelek Sajnos az ű karakter kódpozíciója eltér a Latin-2-től 47. oldal
ISO 8859-1 és -2 48. oldal
Unicode és UCS Universal Character Set, ISO/IEC 10646 Jelenleg mintegy százezer karaktert tartalmazó kódkészlet Kb. 2 21 különböző karakterig bővíthető Pontos érték: 2 20 + 2 16 = 0x10FFFF = 1114112 karakter Minden élő (és sok holt) nyelv összes írásjele, matematikai szimbólumok, valamennyi korábbi karakterkészlet összes jele Több-bájtos karakter-kódok Unicode: ipari szabvány Kezdetben jóval egyszerűbb és korlátozottabb volt Mára a kettő teljesen kompatibilis A Unicode szabványok részletes használati útmutatót, implementációs segédletet is adnak az egyes karakterekhez Rendezési, megjelenítési, szerkesztési útmutatók 49. oldal
Unicode kódtáblázat http://www.ianalbert.com/misc/unichart.php 50. oldal
Unicode és UCS A Unicode általános, nemzetközi kódkészlet Latin ábécéktől a kínai írásjeleken át az egyiptomi hieroglifákig Jellegzetesség, hogy az ékezetes karaktereket építőelemeikből egyesével is öszerakhatjuk Igen kifinomult megjelenítési, szerkesztési, rendezési, konverziós szabályok A karakterekhez a szabvány számértéket rendel Jelölésük: U+kódpozíció; példa: 'A' = U+0041 A kódpozícióhoz különféle szabványos eljárásokkal rendelhetünk bitsorozatokat UTF-8, UCS-2, UTF-16, UTF-32/UCS-4 51. oldal
A Unicode kódok A 1114112 kódpozíciót a könnyebb kezelhetőség érdekében 17 db 65536 (2 16 ) kódot tartalmazó síkra (plane) osztották A legelső síkba kerültek a leggyakoribb karakterek Basic Multilingual Plane (BMP) Ezen a karakterek reprezentációja a leggazdaságosabb Egyes reprezentációk csak ezt az egy síkot támogatják Az első 256 kódpozíció megegyezik a Latin-1 kódtáblázat kiosztásával Ebből következően az első 128 pozíció az ASCII 52. oldal
Basic Multilingual Plane (BMP) Az ábra minden négyzete 256 kódpozíciót takar: Latin karakterek Egyéb európai karakterek Nyelvészeti karakterek Közelkelet Afrika Dél-Ázsia Kelet-Ázsia Egységesített CJK Ausztrália Szimbólumok Ékezet-építő karakterek Tiltott (UTF-16), ill. privát felhasználás Egyéb Kiosztatatlan http://en.wikipedia.org/wiki/basic_multilingual_plane 53. oldal
UTF-32 / UCS-4 Ötlet: minden Unicode karaktert reprezentáljunk a kódpozíciójával Négy bájton kényelmesen elfér A legegyszerűbb megoldás Példa: az Szőr sztring kódjai: 0x00000053 0x0000007A 0x00000151 0x00000072 Minden karaktert azonos hosszúságú bitsorozat reprezentál Az ékezet-építő karakterek miatt így is előfordulhat, hogy egyetlen megjelenített szimbólumot több négybájtos karakteren ábrázolunk Pl. az ő betűt az U+006F U+030B párral is megadhatjuk: 0x00000053 0x0000007A 0x0000006F 0x0000030B 0x00000072 Hátrányai: A reprezentáció függ az alkalmazott bájtsorrendtől Viszonylag gazdaságtalan kódolás (32 bájt négy karakterért!) Az extra biteket viszont különböző egyéb célokra használhatjuk Nulla bájtokat tartalmaz, ami megzavarhatja a korábban írt programokat Viszonylag ritkán használatos 54. oldal
UTF-8 1993, Ken Thompson, Rob Pike Az egyes Unicode karaktereket 1-4 bájt hosszúságú bájtsorozatokra képezi Az ASCII karakterek reprezentációja nem változik: 0xxxxxxx A BMP többi karaktere két vagy három bájt hosszú: 110xxxxx 10xxxxxx 1110xxxx 10xxxxxx 10xxxxxx A többi 16 sík karakterei négybájtosak: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (7 bit) (11 bit) (16 bit) (21 bit) A karakterekhez a lehető legrövidebb sorozatot rendeljük Az első bájt legmagasabb helyiértékű egyes bitjeinek száma határozza meg a sorozat hosszát A további bájtok egyértelműen megkülönbeztethetőek a karakterkezdő bájtoktól 55. oldal
UTF-8 Például a Szőr reprezentációja: 'S' = U+0053, 0x53 = (1010011) 2 'z' = U+007A, 0x7A = (1111010) 2 'ő' = U+0151, 0x0151 = (101010001) 2 'r' = U+0072, 0x72 = (1110010) 2 01010011 01111010 11000101 10010001 01110010 0x53 0x7A 0xC5 0x91 0x72 S z ő r 56. oldal
UTF-8 Előnyök Bájtsorrend-független reprezentáció Az U+0000 (0x00) karaktertől eltekintve egy karakter reprezentációjában sem fordul elő nulla bájt A létező programok jó része számára így az UTF-8 szövegek kezelhetőek maradnak Állapotmentes kódolás; ha hiba történik, a következő karaktertől egyértelműen folytatható a dekódolás Hátrányok A változó hossz miatt a sztringműveletek nehézkesebbek Elvileg ugyanaz a karakter többféleképpen is kódolható volna Pl. 00000001 =?= 11000000 10000001 A jelenlegi szabvány már tiltja a hosszabb forma elfogadását Az adatátvitelben az UTF-8 kezdi felváltani az ASCII-t 57. oldal
UTF-16 / UCS-2 A C, C++, Java, C# programozási nyelvek széles karaktereinek reprezentációja Az UTF-16 a BMP karaktereit egységesen 2 bájton, a többi sík (ritka) karaktereit pedig 4 bájton reprezentálja A BMP karaktereinek számértéke megegyezik az Unicode kódpozíciójukkal Például Szőr : 0x0053 0x007A 0x0151 0x0072 Ha csak a BMP karaktereit engedjük meg, az így kapott egyszerűsített kódolás az UCS-2 58. oldal
UTF-16 / UCS-2 Az UTF-16-ban a BMP-n kívül rekedt (2 20 db) kódpozíciót két duplabájtos kóddal ábrázoljuk Surrogate pairs, pótpárok A duplabájtos összetevők értéke 0xD800 és 0xDFFF közé esik Ez egy 11 bit széles tartomány, amit két 10 bites részre osztunk: Felső fél: Alsó fél: 110110xxxxxxxxxx 110111xxxxxxxxxx A BMP-ben ezekhez a pozíciókhoz nincs karakter rendelve Az x-ek helyére szabadon választható 10+10 bit értéke az ábrázolandó karakter Unicode pozíciója mínusz 2 16 Példa: mükénéi Lineáris B Nő karakter: U+10081 0x10081 0x10000 = 0x0081 = (0000000000 0010000001) 2 (1101100000000000 1101110010000001) 2 = 0xD800 0xDC81 59. oldal
UTF-16 / UCS-2 Előnyök: A népszerű programozási nyelvek beépített támogatást adnak Viszonylag gazdaságos kódolás A hétköznapi használatban lévő karakterekre egységesen kétbájtos reprezentációhossz Hátrányok: A BMP-n kívüli karakterek változó hosszúságú kódolást eredményeznek A konkrét reprezentáció függ az architektúra bájtsorrendjétől UTF-16, UTF-16BE, UTF-16LE A szövegeket bájtsorrend-jelző (BOM, Byte Order Mark) U+FEFF karakterrel szokás kezdeni ( nulla hosszúságú nem törhető térköz ) Az U+FFFE kódpozícióhoz nincs karakter rendelve, így egyértelmű a döntés Az UTF-16-t gyakran használják belső ábrázoláshoz 60. oldal
Tartalomjegyzék 1. Egész számok ábrázolása 2. Tört számok ábrázolása 3. Szövegek ábrázolása 4. Digitális logika 61. oldal
Digitális áramkörök, logikai kapuk A digitális áramkörökben csupán két logikai értéket különböztetünk meg Pl. 0V := 0 (hamis), 5V := 1 (igaz) A logikai kapuk egyszerű digitális áramkörök, melyeket építőkockaként használhatunk bonyolultabb áramkörök készítéséhez A kapuk összeállításához valamilyen kapcsolóként viselkedő áramköri elemre van szükség Relé, vákumcső, tranzisztor 62. oldal B C E
NEM kapu (NOT) A NEM kapu a bemenetére érkező jel ellenkezőjét állítja elő a kimenetén Inverter avagy fordító U be +U cc U ki 63. oldal A A X 0 1 1 0 X
NEM-ÉS kapu (NAND) A NAND kapu értéke mindig 1, kivéve ha mindkét bemenete is 1 U 1 U 2 +U cc U ki 64. oldal A B A B X 0 0 1 0 1 1 1 0 1 1 1 0 X
NEM-VAGY kapu (NOR) A NOR kapu értéke csak akkor 1, ha mindkét bemenete 0 U 1 +U cc U 2 U ki 65. oldal A B A B X 0 0 1 0 1 0 1 0 0 1 1 0 X
ÉS kapu (AND) Az ÉS kapu csak akkor ad 1-es értéket, ha mindkét bemenete egyaránt 1-es U 1 U 2 +U cc +U cc U ki 66. oldal A B A B X 0 0 0 0 1 0 1 0 0 1 1 1 X
VAGY kapu (OR) A VAGY kapu kimenetére akkor kerül 1-es jel, ha legalább az egyik bemenete 1-es U 1 +U cc U 2 +U cc 67. oldal U ki A B A B X 0 0 0 0 1 1 1 0 1 1 1 1 X
Kizáró VAGY kapu (XOR) Akkor kerül 1 a kimenetére, ha pontosan egy bemenete 1-es A B X A B X 0 0 0 0 1 1 1 0 1 1 1 0 68. oldal
Boole-függvények Boole-függvényeknek nevezzük az egy vagy több igazságértékről igazságértékre képező függvényeket A Boole-függvényeket egyértelműen megadhatjuk, ha felírjuk, hogy mely paraméterértékekre milyen értéket vesznek fel (igazságtábla, 2 n számú sor) Bármely Boole-függvényhez készíthető egy NOT, OR, AND kapukból álló, őt előállítható áramkör Az igazságtábla 1-es értékű soraihoz rendeljünk AND kapukat a megfelelően beinvertált bemenetekkel, majd kössük őket össze OR kapuval 69. oldal
Boole-függvények Pl. Többségi függvény: A B C A B C A B C M 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 A B C 70. oldal ABC ABC ABC ABC M
NAND (és NOR) áramkörök A NAND és NOR kapuk egymagukban is képesek a többi kapu megvalósítására NOT: egyszerűen kössük össze a bemeneteket AND, OR: A B A B A&B A&B 71. oldal A B A B A B A B
Példa: 1 bites összeadó áramkör Adjuk össze A-t és B-t! Az összeg kerüljön S-be Az esetleges túlcsordulást (átvitelt) jelezzük C-ben A B C A B S C 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 72. oldal S
Példa: Teljes összeadó áramkör Ha többbites összeadót szeretnénk építeni, bemenő átvitelre is szükség van: A B C' C A B C S C' 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 73. oldal S
Példa: többites összeadó Ha több bites számokat szeretnénk összeadni, egyszerűen egymás mellé kötjük a teljes összeadóinkat: C A3 Teljes összeadó B3 C2 A2 Teljes összeadó B2 Teljes összeadó Teljes összeadó 74. oldal C1 A1 B1 S3 S2 S1 S0 C0 A0 B0