Szám- és kódrendszerek Informatikai rendszerek alapjai Horváth Árpád <horvath.arpad@amk.uni-obuda.hu> 2015. november 27. Tartalomjegyzék 1. Számok és ábrázolásuk 1 1.1. Számok értelmezése..................................... 1 1.2. Egész számok bináris ábrázolása............................. 4 1.3. Törtszámok bináris ábrázolása lebeg pontos...................... 6 2. Karakterek ábrázolása 10 3. Képek és ábrázolásuk 11 3.1. Vektorgrakus ábrák.................................... 11 3.2. Rasztergrakus ábrák................................... 14 3.3. Színek, felbontások..................................... 16 1. Számok és ábrázolásuk Számrendszerek Helyiérték nélküliek, pl római számok (MMVIIII) Helyiértékesek a nulla indiai felfedezése óta lehetséges. Érdekesség (nem kell tudni): Az ókori rómában nem igazán használták a kivonási szabályt, a kilencet VIIII formában írták és nem IX formában. http://www.geographic.hu/index.php?act=napi&id=4452 A régi (de nem ókori) órákon gyakran a négyet IIII formában, de a kilencet IX formában írták, aminek a lehetséges okairól (jobban néz ki, öntéstechnikai okok) lehet olvasni az interneten. 1.1. Számok értelmezése 1
Tízes számrendszerbeli szám értelmezése Számjegyek: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 975,3 10 Helyiérték súlya 10 2 10 1 10 0 10 1 Helyiérték neve százasok tizesek egyesek tizedesek Számjegy 9 7 5 3 Számjegy súly 9 10 2 7 10 1 5 10 0 3 10 1 Tényleges érték 900 70 5 0,3 Kettes számrendszerbeli szám értelmezése Számjegyek: 0, 1 101,1 2 Helyiérték súlya 2 2 2 1 2 0 2 1 Helyiérték neve négyesek kettesek egyesek felesek Számjegy 1 0 1 1 Számjegy súly 1 2 2 0 2 1 1 2 0 1 2 1 Tényleges érték 4 0 1 0,5 Teljes szám tényleges értéke 4+0+1+0,5=5,5 Tizenhatos számrendszerbeli szám értelmezése Számjegyek: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 17F,8 16 Helyiérték súlya 16 2 16 1 16 0 16 1 Számjegy 1 7 F 8 Számjegy súly 1 16 2 7 16 1 15 16 0 8 16 1 Tényleges érték 256 112 15 0,5 Teljes szám tényleges értéke 256+112+15+0,5=383,5 Az informatikában használt számrendszerek alap számjegyek írásmód kettes bináris R=2 0, 1 0b 00001111 nyolcas oktális R=8 07 017 tizenhatos hexadecimális R=16 015 (0F) 0x 0F tizes decimális R=10 09 15 Az írásmódnál a programnyelvekben használatos gyakori írásmódot tüntettük fel, minden esetben a 15 példáján. Ha egy szám 0-val kezd dik, akkor sok programnyelv nem tizeskén számrendszerben értelmezi. Ha 0x-szel kezd dik hexadedimálisnak, ha 0b-vel akkor binárisnak, ha 0-val 2
de nem az el z ekkel, akkor oktálisnak. A hexadecimálisban a kisbet k is megengedettek legtöbb programnyelvben. Kipróbálhatják Pythonban, ahogy órán tettük, egyszer en telepíthet Windows alá is, Linux telepítésekben általában benne van, de az ipython csomagot érdemes telepíteni és ipython-t futtatni parancssorban. Windows alatt az IDLE nev grakus fejleszt i felületet érdemes elindítani. Biztosan használható ez az írásmód a következ programnyelvekben: C, C++, Python C#-ban nincs ilyen, a 12 8 számot így lehet kezelni: int i = Convert.ToInt32("12", 8); Ha az alap 2 hatványa, az átváltás viszonylag egyszer : 3 2 5 nyolcas 1 1 0 1 0 1 0 1 kettes D 5 tizenhatos Miért keveri az amerikai informatikus a Halloweent a Karácsonnyal? Mert szerinte Oct 31 ugyanaz mint Dec... (1-je Mindenszentek napja (All Hallow's Day), 31-e Mindenszentek estéje (All Hallow's Eve), 2-a halottak napja.) PNG-ábra hexadecimális nézetben 3
1.2. Egész számok bináris ábrázolása Legnagyobb el jel nélküli n bites szám 8 biten ábrázoljunk egész számot el jel nélkül. Melyik a legnagyobb? 1111 1111 2 adjunk hozzá egyet 1 0000 0000 2 = 2 8 (túlcsordulás, nem fér 8 bitre) 8 bites számnál a legnagyobb egész szám: 2 8 1 = 255, általában n bites számnál: 2 n 1. Egész számok bináris ábrázolása 2 n 1... 2 0 1 1 0 1 0 1 0 1 n... 1 MSB LSB LSB: less signicant bit, legkevésbé jelent s bit MSB: most signicant bit, legjelent sebb bit A legnagyobb ábrázolható el jel nélküli szám: 2 n 1. Ha az MSB az el jelbit, akkor az ábrázolható legnagyobb szám: +2 n 1 1, a legkisebb szám: 2 n 1. El jeles számok pozitív számok 50 0 50 = 2 25 +0 25 1 25 = 2 12 +1 12 0 12 = 2 6 +0 6 0 6 = 2 3 +0 3 1 3 = 2 1 +1 1 1 1 = 2 0 +1 0 Kettes osztás maradékát írjuk fel, amíg nulla nem lesz a hányados. Csak az els két oszlopot írjuk le. Alulról felfelé írjuk le a maradékokat. Ha kevés a számjegy, az elejét nullákkal b víthetjük pl. 8 bitre. 50 = 110010 2 = 00110010 2 4
El jeles számok negatív számok +50 = 00110010 2 (nyolc biten) Abszolutértékes: csak a legels bitet, az el jelbitet változtatom. 50 = 10110010 2,a Egyes komplemens: Az összes számjegyet ellentettjére változtatom. 50 = 11001101 2,1k Ilyenkor van egy 0 = 11111111 2 Kettes komplemens: Az egyes komplemens +1 50 = 11001101 2,2k Ebben az összeadás ugyanúgy megy, mint az el jel nélkülieknél! Gyakran használt. Eltolásos: A számokhoz valamennyit hozzáadunk, hogy mindig pozitív legyen, és a pozitív számot a szokott módon ábrázolom. Az eltolásos rendszerben könny két szám összehasonlítása (<, >), ezért a lebeg pontos számok kitev jénél alkalmazzák. Feladatok Írjuk fel a 111 számot kettes és tizenhatos számrendszerben. Írjuk fel a 66 el jeles számot kettes számrendszerben egyes és kettes komplemensként, valamint 127-es eltolással. Írjuk fel az ABBA 16 számot kettes, tizes és nyolcas számrendszerben. Írjuk fel az 2EF, 8 16 számot tizes számrendszerben. 10, egyes komplemenssel 8 biten 10 0 5 1 2 0 1 1 0 10 = 00001010 2 (8 bitre kiegészítve) Egyes komplemens: 0-ásokat 1-esekre cserélem és viszont 10 = 11110101 2,1k 5
24, kettes komplemenssel 8 biten 24 0 12 0 6 0 3 1 1 1 0 24 = 00011000 2 (8 bitre kiegészítve) Egyes komplemens: 0-ásokat 1-esekre cserélem és viszont 24 = 11100111 2,1k Kettes komplemens: az egyes komplemeshez egyet adok: az utolsó 1-esek 0-ává, az el ttük álló 0-ás 1-essé alakul. 24 = 11101000 2,2k 10, 63-as eltolással El ször hozzáadjuk a számhoz az eltolás értékét: 10 + 63 = 53. Ábrázoljuk el jel nélküli egész számként (pl. a korábban tanult 2-es osztás maradékaival): 53 = 110101 2 Ez lesz az eltolásosban a szám alakja: 10 = 110110 2,e 1.3. Törtszámok bináris ábrázolása lebeg pontos Lebeg pontos számábrázolás sign exponent(8-bit) fraction (23-bit) 0 0 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 =0.15625 31 23 0 Számok normálalakja R: számrendszer alapszáma (radix) m: mantissza k: karakterisztika (kitev ) szám = ±m R ±k pl. 314, 15 = 3, 1415 10 2 6
A kitev el jelének ábrázolása lehet Lebeg pontos számábrázolás A karakterisztika el jelét eltolásos rendszerben ábrázolják. v = ( 1) el jel 2 katakterisztika - katakterisztika-eltolás (1 + törtrész) sign exponent(8-bit) fraction (23-bit) 0 0 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 =0.15625 31 23 0 IEEE 754 Single Floating Point Format fraction=törtrész, sign=el jel, exponent=kitev, karakterisztika Mivel 1111100 2 = 124, és 0,01 2 =0,25, ezért v = ( 1) 0 2 (124 127) (1 + 0, 25) = +1, 25 2 3 = +1, 25/8 = +0, 15625 7
Feladatok Írjuk fel a 10 bites kettes komplemenssel kódolt legnagyobb és legkisebb ábrázolható számot kettes komplemens ábrázolásban valamint tizes számrendszerben! Melyik számot ábrázolja a következ lebeg pontos szám? A karakterisztikát (a kitev t) 8 bit ábrázolja többletes el jeles kódolással 127 többlettel, a többinek a sorrendje azonos az órán bemutatottal. 1 10000011 00100000000000000000000 Szabványos adattípusok, IEEE (nemzetközi villamosmérnök-egyesület) szabványa 8
Szabványos számformátumok név bit tartomány word integer 16 32768 x 32767 short integer 32 2 10 9 x 2 10 9 long integer 64 9 10 18 x 9 10 18 packed decimal 80 999999999999999999 x 999999999999999999 short real 32 8,43 10 37 x 3,37 10 38 long real 64 4,19 10 307 x 1,67 10 308 temporary real 80 3,4 10 4932 x 1,2 10 4932 1/3 = 0.33333333333333331 (bináris szám) 1/3 = 0.33333333333333333 (binárisan kódolt decimális) Nem kell tudni a fenti összes adattípust és a pontos tartományt, de feltétlenül tudni kell, hogy milyen egyesület szabványában van benne, és hogy egészb l és lebeg pontosból (real = valós) is többféle van. A bájt (jele B, angolul byte) a számítástechnika elterjedt alapegysége, 8 bitet foglal magában. Hány hexadecimális számjeggyel írható fel? 2-vel, pl. 0011 1010 2 = 3A 16 Figyeljük meg továbbá, hogy mindegyik fenti számformátum egész számú bájtot foglal el. Ez így lesz a karakterkódoknál is. A packed decimal formátumban a számjegyek 10-es számrendszerben kódoltak, minden számjegyet 4 bit kódol. Ezt hívják binárisan kódolt decimálisnak (BCD). 2009 =? BCD 0010 0000 0000 1001 BCD, ugyanaz mint a 2009 16 9
2. Karakterek ábrázolása EBCDIC (1950-) ASCII (1963-) Extended Binary Coded Decimal Interchange Format American Standard Code for Information and Interchange 0 1 2 3 4 5 6 7 0 NUL DLE SP 0 @ 1 SOH DC1! 1 A P ` p Q a 2 STX DC2 " 2 B R b q r 3 ETX DC3 # 3 C S c s 4 EOT DC4 $ 4 D T d t 5 ENQ NAK % 5 E U e u 6 ACK SYN & 6 F V f v 7 BEL ETB ' 7 G W g w Q: 0x51 8 BS CAN ( 8 H X h x 9: 0x39 9 HT EM ) 9 I Y i y szóköz: 0x20 A LF SUB * : J Z j z WALL: 0x57414C4C { } B VT ESC + ; K [ k C FF FS, < L \ l D CR GS = M ] m E SO RS. > N ^ n ~ F SI US /? O o DEL A karakterek hexadeximális kódja leolvasható a ASCII-táblából. Felül található az els hexadecimális számjegy, balra a második. A H bet kódja például 4816 = 0x48 = 0100 10002. Az ASCII tábla els két oszlopában (0x00 0x2F) vezérl karakterek szerepelnek (HT=(horizontális) tabulátor, CR=sor elejére (kocsi vissza), LF=soremelés, BEL=hangjelzés). A második oszloppár (0x20 0x3F) 10
tartalmazza a számokat és egyéb jeleket, például a szóközt (SP) is. A harmadik oszloppárban (0x400x5A) találhatóak a nagybet k, a negyedikben a kicsik (0x600x7A). Más nyelvekhez más kódlap Az ASCII kódtáblát kiegészítették 8 bitre, amelyben pár ékezetes bet is helyt kapott ISO; DOS; Windows; Mac OS szabványok ISO-8859-1 = Latin-1 8-bites ASCII Windows-1252 Nyugat-Európai (û, õ) ISO-8859-2 = Latin-2 Közép-Európai (, ) UNICODE Minden két bájtos számhoz egy karakter tartozik tehát 4 hexadecimális számjeggyel írható le egy karakter kódja. Els 256 helyen a Latin-1-es kódlap Többféle kódrendszer a két bájtot általában változó hosszúságú kóddá alakítják, a gyakori karaktereket pl. 1 bájttal, a ritkákat 4 bájttal kódolják UTF-8 elterjed ben: egy, két és négybájtos karakterek, Latin-1-es kódlapú azonos UTF-8-ban is. mindenféle írásjel (japán, kínai gondok) matematikai, biológiai, csillagászati... jelek 3. Képek és ábrázolásuk Képek ábrázolási módja vektorgrakus: objektumokból áll, melyeknek bizonyos tulajdonságait adjuk meg rasztergrakus (=bittérképes=pixelgrakus): pixelenként leírja annak szín-fényesség-átlátszóság adatait 3.1. Vektorgrakus ábrák 11
Vektorgrakus ábrák Objektumokból áll a kép (pl. téglalapok, ellipszisek, sokszögek) Ezeket az objektumokat nem képpontokként, hanem adataikkal tárolják a vektorgrakus fájlformátumok, tehát újból megnyitva a fájlt az egyes objektumok jellemz i külön szerkeszthet ek, vagy akár törölhet egy objektum. Egy kör megadása például a következ adatokkal történhet: középpont koordinátái, sugár, vonalvastagság, körvonal színe, kitöltés színe, vonaltípus (pl. szaggatott), átlátszóság. Egy szöveg megadása például a következ adatokkal történhet: a szöveg, a szöveg helye, bet család (Arial), stílus (döntött, vastag), méret (12 pontos), szín, átlátszóság. Vektorgrakus ábrák, görbe vonalak A görbéket is matematikai módszerekkel, általában Bézier-görbékkel írja le. Pierre Bézier, a francia mérnök 1962-ben a Renault számára készített számítógépes tervez rendszerekhez (CAD) használta a róla elnevezett görbét Megadható vele a görbe kezd és végpontjában milyen legyen az érint je, és mennyire görbüljön. Az alábbi görbéhez például 4 pont megadása szükséges: a kezd és végpont, valamint két úgynevezett kontrollpont (P és Q) koordinátája. P Q Vektorgrakus ábrák jellemz i Geometriai alakzatokból álló ábrák tárolására megfelel pl. grakonok Végtelenségig nagyítható min ségromlás nélkül A kép bájtban mért mérete csak a megadandó adatok mennyiségét l függ, a négyzetcentiméterben mért mérett l nem. 12
Vektorgrakus formátumok és szerkeszt k SVG SVG (Scalable Vector Graphics) képformátum, a World Wide Web Consortium (W3C, a web szabványait felügyel szervezet) szabványa, hivatalos webes képformátum. Egy (általában UTF-8 kódolású) szöveges formátumban, az úgynevezett XML formátumban tárolódik. Az XML az weboldalak leírására alkalmas HTML formátum közeli rokona. Az SVG pl. az Inkscape szabad szoftverrel szerkeszthet. Egyszer sített példa SVG-re <?xml version="1.0" encoding="utf-8" standalone="no"?> <svg> <g id="layer1"> <rect style="fill:#0000ff" width="447.1" height="413.6" x="149.0" y="312.8" /> <rect style="fill:#00ff00;fill-opacity:0.73" width="119.0" height="202.2" x="391.7" y="605.1" /> </g> </svg> 13
Az el z fájlhoz tartozó ábra Vektorgrakus formátumok és szerkeszt k Továbbiak PostScript és PDF, sok grakonrajzoló vagy vektorgrakus szerkeszt program képes ilyen formátumokba menteni (MATLAB, Pylab, Inkscape) A PostScript nyelvet komolyabb nyomtatók ismerik. Szöveges formátum. Els sorban dokumentumleíró nyelv. Ábrák tárolására alkalmas változatának a kiterjesztése.eps. A PDF (Portable Document Format) szintén dokumentumleíró nyelv, de vektorgrakus ábrák is tárolhatók ebben a formátumban. Elektronikuskönyv-olvasók támogatott formátuma. Kisebb, mint a PostScript, mert tömörítést alkalmaz. Kereskedelmi szoftverek és képformátumaik: pl. Corel Draw (.CDR) 3.2. Rasztergrakus ábrák Rasztergrakus ábrák A képet mátrix-szer en elrendezett képpontokból, un. pixelekb l építik fel 14
Pixelenként megadható mondjuk az egyes színek er ssége (RGB=vörös, zöld, kék), és az átlátszóság vagy hogy egy adott színpalettából hányadik színt veszem gyakran tömörített formátumokat használnak, a tárfoglalás miatt Rasztergrakus ábrák Színpalettás ábrázolás A színpalettás ábrázolásnál egy színlistát hoznak létre, és a listában elfoglalt sorszámmal azonosítják a színeket az egyes pixelek esetén. A listában használhatnak pl. RGB-összetev ket az egyes színek megadására, de az egyes pixeleknél már csak a szín sorszámát adják meg. Az ábrán négyféle színt használnak, tehát egy képpont színe 2 biten eltárolható. 8 bit esetén 256 féle szín használható. n bit esetén 2 n bit. Veszteséges és veszteségmentes tömörítés Veszteségmentes tömörítés: az összes képpont adata pontosan helyreállítható pl. PNG, és GIF Veszteséges tömörítés: kihasználja a látás törvényszer ségeit nom színátmenet képeknél, pl. fotóknál szabad szemmel nem lehet észrevenni különbséget pl. JPEG 15
Fontos A vektorgrakus és a pixelgrakus formátum között nincs olyan, amelyik minden szempontból jobb lenne a másiknál. Van amelyik egyik szempontból jobb, vam amelyik másik szempontból. Például geometriai alakzatokból álló kép esetén általában a vektorgrakus formátum a jobb, fényképek esetén pedig általában a rasztergrakus (azon belül is a veszteséges tömörítés JPEG). 3.3. Színek, felbontások Színek megadása RGB Az emberi szem háromféle szín érzékelésére alkalmas receptorokkal, az úgynevezett csapokkal rendelkezik. Ennek megfelel en a vörös, zöld és kék összetev k fényességének megadása elegend ahhoz, hogy egy színt el állítsunk. Az alapszínek angol kezd bet ib l RGB-összetev knek is nevezzük ezeket. Tároláskor gyakran egy színt két hexadecimális számjeggyel jellemezzük: #00FF00 jelentése R-b l 0, G-b l 0xFF=255, B-b l 0. Tehát ez tiszta zöld színt jelent. Kérdések Mit használnánk egy fénykép közzétételére weben? Mit használnánk egy grakon közzétételére weben? Mit használnánk egy dokumentum közzétételére web-en, ha fontos, hogy különböz operációs rendszereken is ugyanúgy nézzen ki? Adjunk példát egy zöld szín hexa kódjára! Adjunk példát egy szürke szín hexa kódjára! Mi a fekete és a fehér hexa kódja? 16
Melyik képeket lehet érdemes vektorgrakusan tárolni? Színjelölések az SVG-ben (és HTML-ben, CSS-ben) Az #00A200 kódú szín zöld színezet. Ez a szín másképpen rgb(0,162,0). A0 16 = 10 16 + 2 = 162, mert az A 10-et jelöl, és a 16-os helyiértéken van. Egy ugyanilyen szín, de sötétebb szín kódja például #008800. A #707070 kódú szín másképpen rgb( ). Színezete. Egy ugyanilyen szín, de világosabb szín kódja. A #800000 kódú szín másképpen rgb( ). Színezete. Világosabb vagy sötétebb lesz a #0A0000 kódú szín? 17
Felbontások 1. Képfelbontás: a képpontok távolságát mutatja meg egy képben. Mértékegysége: képpont/hüvelyk (pixels per inch = ppi). Tipikus képfelbontás: 72 ppi 300 ppi. 2. Színmélység (bitfelbontás): megmutatja, hogy hány színt használunk a képen, vagyis hány biten tároljuk a színeket. Mértékegysége: bit/pixel (bits per pixels = bpp). Tipikusan: 8 bpp 24 bpp. Bitek pixelenként pixel R G B 8 3 3 2 12 4 4 4 24 8 8 8 3. Monitor, nyomtató felbontása: a kép megjelenítésére szolgáló eszköz képpontjainak távolságát mutatja meg. Kérdések Mértékegysége: pont/hüvelyk (dot per inch = dpi). Monitor tipikusan: 96 dpi. Összesen hányféle színt lehet megkülönböztetni 12 bpp színmélység mellett? Hányféle szintjét lehet megkülönböztetni a zöldnek a 8 bpp-s színmélység mellett? 24 bpp mellett? Milyen képformátumoknál van értelme a képfelbontásnak? 18