1. lecke: Alapok
| Cél: Az informatikai tárgy keretein belül elsőként számrendszerekkel és adatábrázolással (kódolással) foglalkozunk. Ez szükséges már az alapszintű Excel feladatok értelmezésénél és megoldásánál, valamint a Visual Basic, ill. MATLAB tanulmányok megkezdésénél. (Számítási módszerek tárgy, Informatika II.) |
A lecke kisebb terjedelmű olvasmányos részeket is tartalmaz. |
Követelmények: Ön akkor sajátította el megfelelően a tananyagot, ha |
- át tud váltani pozitív egész számokat tízesből kettesbe és fordítva;
- emlékezetből fel tudja írni a tanult logikai műveletek igazságtáblázatát;
- saját szavaival el tudja mondani a szövegek kódolásának főbb jellemzőit;
- képes az "A", "a" és "0" jelek ASCII kódjának megadása után az angol nagy- és kisbetűk, ill. a számjegyek kódjainak meghatározására;
- elő tudja állítani negatív egész számok kettes komplemens kódját, illetve megadott előjeles kód alapján vissza tudja állítani a kódolt eredeti egész számot.
|
Időszükséglet: A tananyag elsajátításához (a feladatok megoldásával együtt) hozzávetőlegesen 3 órára lesz szüksége. |
Kulcsfogalmak |
- Kettes, tízes és tizenhatos számrendszer, átváltások.
- Boole-algebra, logikai műveletek, igazságtáblázat.
- ASCII kódtáblázat, karakterek kódja.
- Kettes komplemens kódolás.
- Gépi epszilon.
|
Számrendszerek |
Út a helyi értékes számrendszerekig, a tízes és a kettes számrendszer |
A számolás kialakulása és (korai) fejlődésének története az emberi kultúra rendkívül fontos és érdekes fejezete. Jegyzetünkben nincs mód arra, hogy ezt az izgalmas periódust kifejtve tárgyaljuk, ezért csak felsorolásszerűen közöljük azokat a főbb mérföldköveket, amelyek elvezettek odáig, hogy a ma használt - alapszintű - számolási módszerek, jelölések és rendszerek az élet természetes részévé váltak: |
- A számolás kezdetei (ujjakon, apró tárgyakkal; Kr. e. 500 000 - Kr. e. 20 000), a számfogalom kezdetleges megjelenése (kezdetben csak: egy, kettő, sok).
- Fejlettebb számfogalom, de még csak "kapcsolatokban" (kezdetben a számokat nem önállóan, hanem valaminek a mennyiségét, nagyságát kifejezve használták; tört mennyiségek is).
- Önállóan is megjelennek a számok.
- Számrendszerek, kitűntetett alappal (hatvanas, tízes, tizenkettes stb., ókor), mai naptárunk és időmérésünk is az akkori konvenciókon alapul.
- A tízes számrendszer válik hivatalossá a világ kulturált részének "zömén" (ókor).
- Római számírás és számolás (tízes alapon, egyértelmű, de még nem valódi helyiértékes rendszer, Európában a 13. századig általánosan elterjedt forma; hátrányok: nehézkes aritmetika, nincs nulla jel).
- Az ókorban kialakult hindu tízes alapú rendszer (a nullát is használták) arab közvetítőkön keresztül eljut Európába és lassan elterjed.
- Más alapú számrendszerek leírása tudományos igényességgel (elsőként a kettes, az újkortól).
|
A következőkben áttekintjük a helyiértékes számrendszerek fontos jellemzőit. |
Tekintsük először a decimális rendszert, azaz legyen a rendszer alapja a tíz. A számírás azon a tényen alapul, hogy minden nemnegatív valós szám felírható olyan tíz-hatványok összegeként, amelyben minden különböző tíz-hatvány maximum kilencszer szerepelhet. Ennek az összegnek a rövidített felírásából keletkezik a szám helyiértékes alakja (a képviselt érték tehát a sorban elfoglalt hellyel is meghatározott, ellentétben a római rendszerrel). |
Nem kell mást tenni, csak az összegben szereplő tíz-hatványok együtthatóját jelentő számjegyeket a kitevők nagyság szerinti sorrendjében leírni, figyelembe véve, hogy amelyik kitevő nem szerepel az összegben, annak az együtthatója nyilván nulla. A nulladik kitevő együtthatója után vesszőt teszünk, ezzel jelezve, hogy befejeződött az egészrész, és a törtrész következik. |
Példa: Az 1948,4 valójában az összeg rövidítése. Ebben valóban maximum kilencszer szerepel minden előforduló tíz-hatvány. |
Általánosan, ha a számot -val jelöljük, az előzőek képletben: , ahol az egész rész számjegyeinek számát, a törtrész számjegyeinek számát jelenti. Minden lehetséges indexre , azaz valamelyik számjegy. Az összeg segítségével az számot egyszerűen úgy lehet felírni, hogy az együtthatókat az indexek szerint csökkenő sorrendben egymás után írjuk, az után tizedesvesszőt teszünk. Azaz . |
Ha a szám negatív, akkor igaz, hogy , de az már nemnegatív, így a hatványok összegére való bontás az előzőek szerint elvégezhető, és . Ezzel a módszerrel tehát bármilyen valós szám tíz számjeggyel (plusz az esetleges előjellel és a tizedesvesszővel) felírható. Az alapműveletek a rendszer segítségével könnyen automatizálhatók, ezért elvégzésük könnyen tanulható (ez volt a tízes alapú számrendszer egyik igen nagy előnye a római számolással szemben, és ennek lett köszönhető elterjedése is). |
Jegyezzük meg: a tízes számrendszerben a számok jeleinek helyiértékes felépítéséhez pontosan tíz számjegy kell. |
Természetesen a helyiértékes felírási mód nemcsak a tízes, hanem tetszőleges számrendszer esetén is használható, csak a számjegyeket kell megfelelően megválasztani, továbbá meg kell mutatni, hogy az adott számrendszerben is felírható minden szám a számrendszer alapjának hatványait megfelelően összegezve; mégpedig úgy, hogy az összegben minden hatvány legfeljebb az alap értékénél eggyel kevesebbszer szerepelhet (azaz: a számjegyek száma minden számrendszerben pontosan az alapszám értékével egyezik meg). |
A számjegyek kiválasztása tíznél kisebb alap esetén nem okoz fejtörést, egyszerűen elhagyjuk a tízes rendszer számjegyei közül a feleslegeseket (az éppen vizsgált alapnál nagyobb vagy egyenlő értékű jegyeket). Ha azonban az alap tíznél nagyobb, akkor új számjegyekre van szükség. A mai gyakorlat szerint nem új jeleket szokás új számjegyként kreálni, hanem az latin ábécé elejéről választunk annyi nagybetűt, amennyit az alap értéke megszab. |
A kettes számrendszerben is - a tízes rendszerhez hasonlóan - igaz, hogy minden nemnegatív valós szám felírható az alap, azaz a kettő hatványainak olyan összegeként, amelyben minden kettőhatvány maximum egyszer szerepel. Képlettel: tetszőleges nemnegatív a valós számra igaz, hogy , ahol minden lehetséges -re . Az szám kettes számrendszerbeli alakja pedig: . Negatív szám esetén ugyanúgy járunk el, mint ahogyan a tízes számrendszernél láttuk. |
A kettes számrendszer számjegyeit (a 0-t és az 1-et) angol nevük (binary digit) rövidítéséből bitnek is szokás nevezni. |
Írja fel kettes számrendszerben a következő számokat: 1, 2, 3, 4, 5. Végezze el kettes számrendszerben a következő összeadási műveleteket: 1+1, 1+2, 1+3, 3+3. |
Vizsgáljuk meg most a tizenhatos számrendszerbeli felírásokat! Alkalmazva a tízes és a kettes rendszernél már tárgyalt ismereteket, azt kapjuk, hogy minden nemnegatív valós számra , ahol minden lehetséges -re . Az A, B, C, D, E és F jelek tizenhatos rendszerben rendre a 10, 11, 12, 13, 14 és 15 tízes számrendszerbeli számnak megfelelő számot jelentik. Az szám tizenhatos számrendszerbeli alakja pedig: . Ha a szám negatív, akkor ugyanúgy járhatunk el, mint a tízes és kettes alapú rendszer esetében láttuk. |
Példa egy egyszerű összeadásra a tizenhatos számrendszerben: |
Írja fel tizenhatos számrendszerben a következő számokat: 14, 15, 16, 17, 18. Végezze el tizenhatos számrendszerben a következő összeadási műveleteket: 12+5, 12+12. |
Fontos leszögeznünk, hogy a számok helyiértékes leírása után a kapott jelsorozatból nem lehet egyértelműen eldönteni, hogy az milyen számrendszerben lett megadva (gyakran persze a környezet alapján ez mégis egyértelművé válik). Ezért - sok esetben - a számjegyek mellett fel kell tüntetni valamilyen módon azt is, hogy melyik számrendszert használtuk. |
Mi a következőkben - ha szükséges - a szám jegyei után alsóindexben és zárójelben a számrendszer alapját (tízes számrendszerben) megadva jelezzük a használt rendszert. Például: , tizenhatos, , kettes, , tízes számrendszerben megadott számok. Vigyázzunk arra, hogy nem egyenlő -zel és nem egyenlő -tal. |
A hétköznapi életben a tízes számrendszer a megszokott. Az alap nélkül leírt számokat mi is mindig tízes számrendszerben megadott számnak tekintjük, és a tízes alapot csak akkor írjuk ki, ha külön hangsúlyozni szeretnénk azt, hogy a szám ebben a rendszerben van megadva. |
A fentiek alapján gondolja át, hogy hogyan lehet leírni egy számot nyolcas (oktális) számrendszerben. |
Számok átírása egyik számrendszerről másik számrendszerre |
Ezek után felmerülhet az a kérdés, hogy hogyan kell - ha szükségessé válik - egyik számrendszerben leírt számot egy másik számrendszerbe átírni. |
Mivel tetszőleges számrendszerből tízes számrendszerre való átírás az egyszerűbb, először ezzel foglalkozunk. Az átalakításhoz egyszerűen fel kell írni azt az összeget, amelynek rövidítéséből a szám jelsorozatát kaptuk. Azokat a számjegyeket, amelyek a tízes rendszerben nincsenek benne, helyettesíteni kell az értékük tízes rendszerbeli alakjával. Az így kialakult összegben már minden tízes számrendszerben van felírva, és ha elvégezzük a műveleteket az eredmény is tízes számrendszerbeli lesz (és ez éppen a szám tízes számrendszerben megadott alakja). |
Példa: |
|
|
|
Adja meg a , , , számok tízes számrendszerbeli alakját! |
A feladat megoldása számológéppel, illetőleg számítógéppel (alkalmas programmal) automatizálható, felgyorsítható. |
Megemlítjük azt is, hogy a mostanra már széles körben elérhető és elterjedt tudományos számológépek is meg tudnak oldani ilyen típusú feladatokat, de ezekkel a számolást segítő ügyes kis gépekkel jegyzetünkben nem foglalkozunk. |
Átváltás kettes számrendszerbe |
Az algoritmus népszerű változata az úgynevezett akasztófa módszer. Ennél az eljárásnál az átváltandó számot kell folyamatosan a számrendszer alapjával (jelen esetben kettővel) osztani mindaddig, amíg el nem érjük a nullát. Az osztás hányadosát lefelé egészre kerekítve írjuk az akasztófa bal oldalára, a maradékát pedig a jobbra. Papír-ceruza módszerként alkalmazva: |
Az akasztófa módszer alkalmazása tízes számrendszerből kettesbe váltáshoz | |
A keletkezett nullákat és egyeseket alulról felfelé kell leírni a bináris számban. |
Így végül: |
Hasonlóan a tízesbe történő átváltáshoz, ez a feladat is automatizálható, felgyorsítható számológéppel, illetőleg számítógéppel (alkalmas programmal). Bemutatunk egy Excel-példát, amely megvalósítja az egyszerű átváltást tízes számrendszerből. |
Töltse le a gyak1.xls fájl, és nyissa meg az Excellel! Tanulmányozza a táblázatot. Az átváltandó szám az S6 (sárga hátterű) cellába írandó! |
Átváltás tízesből kettes számrendszerbe Excellel  | |
Számítsa ki a 2015 kettes és tizenhatos számrendszerbeli alakját! |
Valamely valós szám tetszőleges alapról tetszőleges alapra való átalakítása, ha sem sem nem tíz, két menetben történhet. Először alakítsuk át a számot tízes alapú formára, majd ezt alakítsuk tovább -alapú alakra. |
Természetesen a számokkal minden számrendszerben lehet műveleteket végezni. A négy alapművelet elvégzése nem is olyan nehéz, ha felismerjük, hogy ugyanolyan szabályok érvényesek, mint amiket a tízes számrendszerben megismertünk. A problémát legfeljebb ezeknek a szabályoknak az adaptálása okozza. Nehezebb lehet ugyanis a bonyolultabb műveletek hozzáigazítása tetszőleges, de nem tízes alapú számrendszerhez. |
Fixpontos számábrázolás |
Fixpontos számábrázolásnál a tizedes (kettedes) elválasztójel helye rögzített. Ilyen számábrázolást alkalmaznak például a pénztárgépekben, ahol csak két tizedes jegy pontosan jelenítik meg a fizetendő összeget például: 18325,40 Ft. Természetesen adott mennyiségű számjegy esetében az elválasztójel helye egyszerre van hatással az ábrázolható számok nagyságára és az ábrázolás pontosságára. |
Egy tetszőleges valós szám tízes számrendszerből tetszőleges -alapú rendszerbe való átírásához nem kell mást tennünk, mint megkeresnünk azon hatványainak összegét, amely (tízes számrendszerben) -vel egyenlő. Azaz meg kell állapítani, hogy a egyenlőség milyen , és értékekre teljesül. Ezekről az értékekről csak annyit tudunk, hogy az összes és nemnegatív. |
Vizsgáljuk először az összeg első felét, azt, amelyben az indexei nemnegatívok. Ez a részösszeg a -nek -alapú egész részét adja meg, és látható, hogy az utolsó tag kivételével minden más tag osztható -val. Mivel , ezért az is nyilvánvaló, hogy az összeget - azaz egészrészét - maradékos osztással -val elosztva éppen -t kapunk maradékul, a hányados pedig lesz. Ezt -val újra elosztva -et kapunk maradékul. Ezeket a lépéseket az újabb és újabb hányadosra elvégezve rendre megkapjuk a többi pozitív indexű -t. Az osztásokat akkor fejezzük be, ha a hányados nulla lesz. Ez éppen az -edik lépésben következik be, és ekkor az utolsó együtthatót, az -et is megkapjuk. Így nyilvánvaló, hogy a maradékok rendre az értékeket adják, azaz a -t előállító számrendszerbeli alakot definiáló összeg első fele már felírható. |
Az összeg második felét vizsgálva először azt kell megállapítanunk, hogy ez a részösszeg éppen -nek -alapú törtrészét adja meg. Vegyük észre, hogy ha ezt az összeget - azaz törtrészét - -val szorozzuk, akkor a kapott összeg egy olyan -alapú számot határoz meg, amelynek egész része éppen , a törtrésze pedig az összeg, amely ugyancsak egy törtszám, csak a számjegyeinek száma az -alapú alakban eggyel kevesebb, mint az előző törtrészé volt. Ezt a törtszámot -val szorozva az egészrész , a törtrész egy újabb törtszám, amelynek -alapú alakjában -tól -ig szerepelnek a számjegyek. A szorzásokat addig folytatva, amíg a törtrész nullává nem válik, megkaphatjuk a -alapú alakját megadó összeg összes negatív indexű értékeit és értékét is, ami nem lesz más, mint a nulla törtrész eléréséhez szükséges szorzások száma. Sajnos előfordulhat, hogy a törtrész sohasem válik nullává. Ilyen esetben a szám -alapú alakja végtelen sok számjeggyel leírható törtrészből áll. Ekkor a szorzást addig kell folytatni, amíg elő nem kerül egy olyan törtrész, amelyik már a szorzások eredményeként megjelent. Ettől kezdve ugyanis periodikusan ismétlődni fog minden, a két egyforma törtrész közti szorzat, így a -alapú alakja periodikus végtelen törtrészű lesz. |
Ezek alapján az átalakítást a következők szerint kell elvégezni: |
1. | Válasszuk a számot egészrészre és törtrészre. | 2. | Határozzuk meg az egészrész új számrendszerbeli alakját. | 3. | Határozzuk meg a törtrész új számrendszerbeli alakját. | 4. | Vesszővel elválasztva írjuk az egészrész mögé a törtrészt. |
|
Példa: bináris, oktális és hexadecimális átalakítása. |
1. | Az egészrész: , a törtrész | 2. | Az egészrész átalakítása. (A táblázatban a nulladik lépésnél/indexnél a kiindulási egészrészt adtuk meg):

Az egészrész alakjai tehát a megadott számrendszerekben: , , . | 3. | A törtrész átalakítása. A törtrész átalakítása is hasonló, azzal a különbséggel, hogy hogy nem osztani, hanem szorozni kell, és az egészek közé "felcsúszó" számjegyek adják az átalakított értéket. Az eljárást egészen addig folytatjuk, amíg eredményül nullát nem kapunk, illetve el nem érjük a kívánt pontosságot. A táblázatban csak a szorzási eredmények vannak (az átalakítandó szám törtrésze, amit az első szorzáshoz használunk, nincs!):

A törtrész új alakjai: , , . A számjegyek feletti pontok a periodikusan ismétlődő szakaszt jelölik ki. | 4. | Az új teljes alakok: , , . |
|
Műveletek nem csak számokkal, a Boole-algebra |
A 19. század közepétől a számokkal való műveletvégzés mellett megjelentek más objektumokon végezhető műveletek is, és kialakult az absztrakt algebra. Számítástechnikai szempontból ennek a tudományágnak legfontosabb területe a Boole-algebra, amit George Boole munkássága alapozott meg. |
A Boole-algebra egy olyan struktúra, amely egy kételemű (logikai) halmazból és a rajta elvégezhető műveletekből épül fel. A halmaz egyik elemét I(gaz), másik elemét H(amis) értéknek tekintjük, ezeken az értékeken maximum 4 egyoperandusú és 16 kétoperandusú művelet definiálható. Mi ezek közül egy egyoperandusú műveletet és három kétoperandusú művelet fogunk megismerni. |
A tárgyalandó egyoperandusú műveletet negációnak nevezzük. A műveleti jele jel legyen. A művelet elvégzése pedig a következő: ha az operandus értéke , akkor az eredmény legyen , ha az operandus értéke , akkor az eredmény . Formálisan: , . A művelet leírását ún. igazságtábla segítségével is megadhatjuk. |
operandus: | eredmény: | I | H | H | I |
|
A kétoperandusú műveletek egyikét "és", a másikat "vagy", a harmadikat "kizáró vagy" műveletnek nevezzük, a műveleti jelük: , , valamint . A három művelet igazságtáblája: |
1. operandus: | 2. operandus: | eredmény: | eredmény: | eredmény: | I | I | I | I | H | I | H | H | I | I | H | I | H | I | I | H | H | H | H | H |
|
A logikai műveletek számunkra a későbbiekben felhasználható fontosabb tulajdonságai: |
Az "és" valamint a "vagy" művelet: |
- asszociatív, azaz és ;
- kommutatív, azaz és .
|
A "kizáró vagy" kommutatív azaz , de nem asszociatív, azaz nem egyenlő -vel. |
Az "és" művelet disztributív a "vagy" műveletre, illetve a "vagy" az "és"-re, azaz: , illetve . |
Természetesen ezek csak a legegyszerűbb műveleti tulajdonságok, többre azonban nem lesz most szükségünk. Egy konkrét feladat megoldását tartalmazza a következő fájl: boole-példa.docx.  |
Kódolás |
A kódolás feladata, logikai és szöveges adatok kódolása |
Kódolásnak hívjuk - tágabb értelemben - azt a módszert, amely segítségével mások számára is elérhetővé, érthetővé tesszük gondolatainkat. Ilyen kódolás a beszéd, az írás bármilyen formája, így a számok leírása is. |
Szűkebb értelemben kódolásról akkor beszélünk, ha szokásos eszközökkel (számjegyekkel, írással, képpel, videóval, hanggal) megadott objektumokat valamilyen egységes rendszerben újra megadunk, leírunk. A továbbiakban a szűkebb értelmű kódolást értjük kódolás alatt. |
A következőkben a jelen eszközeinek használatához nélkülözhetetlen kódolásokkal fogunk foglalkozni. Ezeknek a kódolásoknak alapja a kettes számrendszer, mivel eszközeink elektronikus eszközök, és a kettes számrendszer két különböző bitje elektronikus eszközökkel könnyen megjeleníthető vagy könnyen továbbkódolható úgy például, hogy az 1-nek egy magas, míg a 0-nak egy alacsony feszültségszintet feleltetünk meg. |
A különböző kódrendszereket vizsgálva megkülönböztethetünk fix hosszúságú és változó hosszúságú kódokból álló kódrendszert. A kódok hosszát a kódban lévő jelek számával szokás definiálni. A számítástechnikában mindkét rendszert használják. |
A Boole-algebra objektumainak kódolása a lehető legegyszerűbb kódolás, hiszen csak két elemnek kell kódot választani (, ). Legfeljebb az okozhat fejtörést, hány jelből álljon a kód, ha ragaszkodunk ahhoz, hogy a kódokat bitekből építjük fel. Egyetlen jelből álló kód esetén például az objektumot 1-gyel, a objektumot 0-val kódolhatjuk, 8 bites kód esetén az kódja a 11111111 jelsorozat, a -é a 00000000 jelsorozat lehet. |
A betűk és egyéb jelek kódolására fix hosszúságú rendszert használunk, a kód hossza általában 8 vagy 16 bináris jel, ritkábban előfordul a 24 és 32 kódhossz is. |
Mivel 0 és 1 jelekből 8 hosszúságú kódot 256-féleképpen lehet előállítani, ezért ezzel a kódrendszerrel összesen 256 különböző jel kódolható. Ezeket a jeleket, illetve kódjaikat szabványok határozzák meg. A legelterjedtebb szabványok egyike az ASCII (American Standard Code for Information Interchange = amerikai szabványkód információcseréhez). Az első 128 kód sztenderd, azaz állandósult jeleket tartalmaz, a második 128 kód az ún. kiterjesztett jelek kódjai. A kiterjesztés többféleképpen is történhet, a bemutatott példa a Latin1 kiterjesztésű változat. A kódrendszert az 1. és 2. táblázat tartalmazza, amelyben a bináris kód mellett megtaláljuk a kód decimális és hexadecimális értékét is (a felesleges nullák nélkül). (A bináris kódban fontosak a kódok kezdő nullái is, mivel ezek nélkül a kód nem lenne egyértelműen visszafejthető!) |
Látható, hogy ebben a rendszerben összefüggő tömböt alkotnak az angol ábécé nagybetűi és a kisbetűi, valamint a számjegyek. Megtalálhatók a jelek között az írásjelek, a gyakran használt matematikai jelek, sok ékezetes betű jele és néhány speciális jel is. |
Az ASCII rendszerben nem kódolhatók a távol-keleti nyelvek betűi, sőt némely európai ábécé különleges betűje sem. Ennek a problémának a kiküszöbölésére alkották meg az Unicode, az UTF-8 rendszereket, Ezekben a kódok 16, 24, 32, 40, 48 hosszúságú 0 és 1 jelből álló sorozatok. Ezekben a rendszerekben 16 bittel 2562, 24 bittel 2563 különböző jelet lehet kódolni. |
Ha jeleket tudunk kódolni, akkor már szöveget is. Ekkor a szöveg betűit, számjegyeit, írásjeleit, betűközeit a jelek kódtáblázatát felhasználva kódoljuk, és a kódokat egymás mögé írva megkaphatjuk a kódolandó szöveg kódját. Vegyük észre, hogy a kapott kód hossza függ a jelek kódhosszától és a szöveg jeleinek számától is. Mivel a jelek száma más és más szövegben általában nem egyforma, ezért a szöveg ilyen kódolása változó hosszúságú kódot eredményez. |
Az ASCII kódrendszer első 128 jele és kódjai | |
Az ASCII kódrendszer második (Latin1 kibővítés) 128 jele és kódjai | |
Számok kódolása |
Természetesen az előző részben leírt kódolási módszer számok kódolására is jó, de az így kódolt számokkal a műveletvégzés nehézkes lesz, tehát alkalmasabb rendszert célszerű választani. Sokféle számkódolás lehetséges. A következőkben négyféle módszerrel fogunk foglalkozni. |
Nemnegatív egész számok kódolása |
Ezeket a számokat számítástechnikában előjeltelen (angolul unsigned) számoknak is szokás nevezni. Kódolásukra 8, 16, 32, 64 bites kódok a legelterjedtebbek. Nyolc bittel 0 és , 16 bittel 0 és , 32 bittel 0 és , 64 bittel 0 és közé eső számokat szokás kódolni. A kód megállapítása nagyon egyszerű. Írjuk fel a kódolandó számot kettes számrendszerben, írjunk eléje annyi nullát, amennyi ahhoz kell, hogy a kód hossza megfelelő legyen. Amit kaptunk az a szám kódja! Fontos megjegyezni, hogy a fenti módszerekkel a megadott intervallumokon kívüli egész számok nem kódolhatók! |
Egész számok kódolása kettes komplemens kóddal |
Ezeket a számokat számítástechnikában előjeles (angolul signed) számoknak szokás nevezni. Szintén 8, 16, 32, 64 bites kódokat használunk a kódoláshoz. Nyolc bittel a és , 16 bittel a és , 32 bittel a és , 64 bittel és közé eső számokat kódoljuk. A megadott intervallumokon kívül eső számok ezzel a módszerrel nem kódolhatók! |
A kódolás a következő (csak a nyolcbites változattal foglalkozunk, a másik három változatban ennek mintájára történik a kódok megállapítása). Ha a szám nemnegatív, akkor - ugyanúgy, mint az előző kódolási módszernél - vesszük a kettes számrendszerbeli alakot, eléje írunk annyi nullát, hogy nyolc jelből álljon, és már készen is van a kód. Ha a szám negatív, akkor hozzáadunk -ot. Az eredmény 127-nél nagyobb, 256-nál kisebb pozitív szám lesz. Ennek vesszük a kettes számrendszerbeli alakját, és az lesz a negatív számunk kódja. Vegyük észre, a nemnegatív szám kódja mindig nullával, a negatívé mindig eggyel kezdődik, ezért a kód vezető bitje megadja azt is, hogy kód negatív vagy nemnegatív számot jelent-e. Ez a bitet emiatt előjelet jelző bitnek hívjuk, hiszen nem direkt módon az előjel kódolására használjuk (ezért az elterjedt "előjelbit" megnevezés nem pontos). |
A negatív szám kódját kettes komplemens kódnak is nevezik. |
A kettes komplemens kód megállapítására egy kevesebb számolást igénylő módszert is lehet használni. A módszer azon alapul, hogy a szám kettes számrendszerben pontosan n darab egyesből áll, nulla nélkül. Ebből a számból könnyű kivonni bármilyen -nél kevesebb bitből álló pozitív bináris számot, hiszen nem kell mást tenni, csak 0-t írni arra a helyiértékre, ahol a kivonandóban 1 van, és 1-et arra, ahol 0 van. Az eredmény nem más, mint az a szám, amit úgy kapunk, hogy a kivonandóban minden bitet az ellentettjére - 0-t 1-re, 1-et 0-ra - cserélünk, más szóval negáljuk, és annyi 1-gyel kiegészítjük a szám elején, hogy n jegyű legyen. Ez a szám eggyel kisebb, mint a kivonandó -1-szeresének kettes komplemens kódja, ezért a kettes komplemens eléréséhez 1-et hozzá kell adni. Amit kaptunk, az nem más, mint a kivonandó (pozitív) szám -szeresének (ez már negatív) kódja. |
Példa: Számítsuk ki a kettes komplemens kódját (16 biten)! Az ún. 2-es komplemenst használjuk a következő módon: |
1. | Írjuk fel a negatív szám abszolút-értékének bináris alakját! | 2. | Fordítsunk meg ellenkezőjére minden bitet (negálás)! | 3. | Egészítsük ki vezető egyesekkel 16 bitre. | 4. | Adjunk hozzá 1-et! |
|
A megoldás táblázatba foglalva: |

|
Érdemes megjegyezni, hogy a fenti módszert mechanikusan alkalmazva a kettes komplemens kódra, a kódhoz tartozó negatív szám abszolút értékének kettes számrendszerbeli alakját, azaz a kódját kapjuk. esetén: |

|
Számítsa ki a -1848 32 bites komplemens kódját! |
Most is bemutatunk egy Excel példát, amely automatizáltan végrehajtja a kettes komplemens kód előállítását. A szám pozitív alakjából kapjuk meg a negatív számot reprezentáló kódot. A Nem függvénnyel megfordítjuk a bináris jegyeket, a "plusz 1" művelethez viszont most egyszerűen kézi átírást használunk. |
A korábbiakhoz hasonlóan, erre a feladatra is biztosít az Excel beépített függvényt, de ennek az alkalmazhatósága is korlátozott (lásd később). |
Kettes komplemens kód előállítása Excellel | |
Ebben a kódrendszerben két szám összegének kódját rögtön megkaphatjuk, ha a kódokat összeadjuk, tehát nem kell az összeadás elvégzéséhez oda-vissza kódolgatni, a számok összeadása helyett elég a kódokat összeadni. Ezen kívül megspórolhatjuk a kivonást is, ugyanis tetszőleges és esetén, az és a kódjának összege ebben a kódrendszerben éppen az szám kódja lesz. A kódja pedig az előbb megismert mechanikus módszerrel könnyedén előállítható. |
Jegyezzük meg, hogy ha két szám összege vagy különbsége nagyobb, mint a kódolható számok intervallumának végpontja vagy kisebb, mint a kezdőpontja, akkor a kódok összege nem állít elő kódot, hiszen a kérdéses összeg vagy különbség ezzel a módszerrel nem kódolható! |
Példa: . Kódokkal: |

|
Ellenőrizze, hogy az eredmény valóban a kódja-e! |
Összetett objektumok (pl. képek) kódolása |
Nem célunk, hogy az összetett objektumok néha mélyebb ismereteket is igénylő kódolását és kódrendszereiket ismertessük, de annak érzékeltetéséhez, hogy milyen elveket alkalmaznak egy ilyen eljárás során, bemutatunk egy vázlatos példát. |
Legyen egy ilyen objektum egy kép. Az első lépés a kódolásban az, hogy a képet diszkrét egységek rendszerére bontjuk. Ezek az egységek az ún. képpontok (a képpont angolul pixel). Minden képpont egy-egy téglalap alakú képrész lesz. A felbontás annál jobb - és ennek következményeképpen a pontokból összerakott kép annál jobban hasonlít az eredeti képhez -, minél több pontból áll. Ezért szokás a felbontást egy adott hosszúságegységre (inch) eső pontok számával jellemezni. A mértékegység a pont per inch (angolul: Dot Per Inch), röviden DPI. Minél nagyobb a DPI érték, annál nagyobb és jobb a felbontás. Mivel a képek kétdimenziósak, és a vízszintes-függőleges irányú pontra bontás nem szükségképpen egyezik meg, ezért előfordulhat, hogy a vízszintes és a függőleges felbontást szorzat alakban adják meg, ahol az első tényező a vízszintes, a második a függőleges irányú egy inch-re eső pontszámot jelenti. |
Az eljárás során tehát egy, a képhez tartozó pontrendszer áll elő. Ennek a rendszernek a pontjait a méretük és a színük jellemzi. A méret a DPI értékből minden pontra egységesen megállapítható, a szín minden pontban más és más lehet. |
A kép bitekből álló kódját tehát úgy lehet megadni, hogy megadjuk a bitkódját annak, hogy hány pontból áll a kép vízszintesen, hány pontból függőlegesen, megadjuk a bitkódját a vízszintes és függőleges pontméretnek, majd egyenként kódoljuk a pontok színét is. A bitkódokat egymás után írva egy 0-1 sorozatot kapunk, és ez lesz a kép kódja. Érdemes megemlíteni, hogy ezzel a kódolási mechanizmussal visszakódoláskor az eredeti képnek egy egyszerűbb változatát kapjuk. Ennek megértéséhez elég azt látni, hogy más és más felbontásra más és más kód alakul ki ugyanarról a képről, és a visszaalakítás után a képek csak "hasonlítani" fognak egymásra is és az eredeti képre is. |
Azt a folyamatot, amely egy valós, folytonos objektumhoz diszkrét, legtöbbször bináris kódot állít elő, digitalizálásnak nevezzük. |
Természetesen ez a leírás egy elnagyolt leírása az egyik lehetséges kódolásnak (legjobban az úgynevezett pixelgrafikus, ill. rasztergrafikus kódoláshoz hasonlít), de ahhoz, hogy a bonyolultabb objektumok bináris kódolását megértsük - elegendő. |
A pixelgrafikus tárolással kapcsolatban célszerű vázlatosan megismerni az RGB modellt. Ebben a modellben minden színt három alapszín összetételével állítunk elő. Ezek a színek: vörös (Reed), zöld (Green) kék (Blue). 16 bites színkód esetén a vörös összetevő kódolására 5, a zöldére ugyancsak 5, a kékre 6 bitet szokás használni. Ez 65536-féle szín kódolását teszi lehetővé, ami az emberi szem teljesítőképességét figyelembe véve egy hétköznapi kép kódolására bőségesen elegendő. Sok ember a képpontok színének 8 bittel (256 féle szín) való kódolásakor kapott kódból visszaállított képről sem tudja megmondani, hogy mi a különbség az eredeti és a visszaállított kép között. |
A képpontokhoz tartozó direkt kódok mellett a kép kódjában általában még bizonyos kiegészítő vagy járulékos információt is kódolnak (pl. hibajavításra). Ez a kód végső hosszát, méretét csak minimális mértékben megnöveli. |
A pixelgrafikus kódolást elsősorban fényképszerű képek kódolására használják. A vonalakból összerakott képek kódolására nem célszerű módszer. Az ilyen típusú ábrákat matematikai módszerek - vektorok - segítségével lényegesen rövidebb kóddal lehet leírni (vektorgrafikus kódolás). |