Szám- és kódrendszerek Informatika elméleti alapjai Horváth Árpád January 17, 2014 Contents 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 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 1
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 0 7 017 tizenhatos hexadecimális R=16 0 15 (0 F) 0x 0F tizes decimális R=10 0 9 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 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ű grafikus fejlesztői felületet érdemes elindítani. 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... 2
(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 hex.png 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 significant bit, legkevésbé jelentős bit MSB: most significant 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 6
szamkarakterkodolasok/ieee_754_single_floating_point_format.pdf Számok normálalakja R: számrendszer alapszáma (radix) m: mantissza k: karakterisztika (kitevő) A kitevő előjelének ábrázolása lehet szám = ±m R ±k pl. 314, 15 = 3, 1415 10 2 7
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) szamkarakterkodolasok/ieee_754_single_floating_point_format.pdf 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 8
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 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-) Extended Binary Coded Decimal Interchange Format ASCII (1963-) American Standard Code for Information and Interchange 8 bites ASCII Más nyelvekhez más kódlap 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 vektorgrafikus: objektumokból áll, melyeknek bizonyos tulajdonságait adjuk meg rasztergrafikus (=bittérképes=pixelgrafikus): pixelenként leírja annak szín-fényesség-átlátszóság adatait 10
3.1 Vektorgrafikus ábrák Vektorgrafikus á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 vektorgrafikus 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. Vektorgrafikus á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 Vektorgrafikus ábrák jellemzői Geometriai alakzatokból álló ábrák tárolására megfelelő pl. grafikonok 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. 11
kepformatumok/bitmap_vs_svg.png Vektorgrafikus 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ő. Vektorgrafikus formátumok és szerkesztők Továbbiak PostScript és PDF, sok grafikonrajzoló vagy vektorgrafikus 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. 12
A PDF (Portable Document Format) szintén dokumentumleíró nyelv, de vektorgrafikus ábrák is tárolhatók ebben a formátumban. Elektronikuskönyv (ebook)-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 Rasztergrafikus ábrák Rasztergrafikus ábrák A képet mátrix-szerűen elrendezett képpontokból, un. pixelekből építik fel kepformatumok/rgb-raster-image2.png 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 Rasztergrafikus á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. 3.3 Egyéb fogalmak 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. 13
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 finom színátmenetű képeknél, pl. fotóknál szabad szemmel nem lehet észrevenni különbséget pl. JPEG kepformatumok/comparison_of_jpeg_and_png.png 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. Bitfelbontás (színmélység): 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/hüvelyk (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. Mértékegysége: pont/hüvelyk (dot per inch = dpi). Monitor tipikusan: 96 dpi. 14
Ö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? Mit használnánk egy fénykép közzétételére weben? Mit használnánk egy grafikon 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? Milyen képformátumoknál van értelme a képfelbontásnak? 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? 15