Információ és adat. Analóg és digitális jelek. Digitalizálás
Adatok bináris ábrázolása. Analóg és digitális jelek. Digitalizálás
A betáplált adatok a lehető legkisebb egységekre lebontva kerülnek tárolásra a számítógépben. Ez a legkisebb adategység a bit (Binary Digit). A bitnek két állapota lehetséges: a ki- és a bekapcsolt állapot. A tárolt adat típusától függően a kikapcsolt állapotot értelmezhetjük nulla (0) vagy hamis, a bekapcsolt állapotot egyes (1) vagy igaz értékként. A számítógép minden adatot egyesek és nullák sorozataként ábrázolva tárol.
Az adatok számítógépen történő tárolását belső adatábrázolásnak nevezzük. A számítógép másképpen ábrázolja a numerikus értékeket, a karaktersorozatokat, és megint másképpen a programutasításokat.
A számrendszerek a számítógéptől függetlenül a valós számok ábrázolására szolgáló jelek és alkalmazásukra vonatkozó szabályok összessége.
Minden számjegypozícióhoz egy helyiértéket rendelünk, és a valós szám értékét az egyes helyiértékek és a hozzájuk tartozó értékek szorzatainak összege adja.
A mennyiségeket a számrendszer alapjának hatványaival írjuk fel, ahol a számrendszer alapja bármely 1-nél nagyobb egész szám lehet.
Leggyakrabban a kettes (bináris) és a tizenhatos (hexadecimális) számrendszert használjuk.
A mindennapi gyakorlatban használt tízes számrendszerben a számokat a tíz hatványaival ábrázoljuk.
A 2532 tízes számrendszerbeli számot az alábbi formában írhatjuk fel:
103 | 102 | 101 | 100 |
2 | 5 | 3 | 2 |
Ennek az értékét a következő módon számíthatjuk ki:
A számítógép az adattárolás, műveletvégzés során a kettes számrendszer számjegyeit tudja legmegbízhatóbban kezelni. A kettes számrendszerben csak két szám van 0 és 1. Tulajdonképpen ez egy kétállású kapcsolónak felel meg. A tízes számrendszerből egy számot könnyen átírhatunk kettesbe, az un. ismételt osztás módszerével. A kettes számrendszerbeli számot a maradékok alulról -tehát a legutolsótól kezdve- történő összeolvasása adja.
Az átalakítandó számot osszuk el kettővel. Minden osztásnál jegyezzük fel a maradékot. Folytassuk az egészrésszel való osztást, amíg nullát nem kapunk.
Átváltás decimális számrendszerből bináris számrendszerbe
Az átváltandó szám: 8110.
Az így kapott maradékokat lentről felfelé olvasva kapjuk meg a bináris számot: 10100012.
A másik módszer az alábbi binárisból decimálisba történő átszámításnak fordítottja, azaz a decimális számot felírjuk kettő hatványainak összegeként. Minden hatvány szerepel, még azok is, amelyek 0-szor fordulnak elő.
Átváltás bináris számrendszerből decimális számrendszerbe
A bináris számrendszerbeli számokat úgy válthatjuk át decimális számrendszerbe, hogy a bináris szám egyes számjegyeit megszorozzuk a hozzájuk tartozó helyi értékekkel, majd az így kapott értékeket összeadjuk.
Például az 100010112 bináris szám decimális értékét az alábbi módon számíthatjuk ki:
A kettes számrendszerben történő számábrázolás nehézsége miatt gyakran alkalmazzák a tizenhatos számrendszerbeli számábrázolást is.
A tizenhatos számrendszer (hexadecimális) alapszáma: 16.
A hexadecimális számokat alkotó elemek a következők :
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Az egyes betűk a következő értékeket szimbolizálják: A=10, B=11, C=12, D=13, E=14, F=15
A bináris számok hexadecimális számmá való átszámolása a következőképpen megy végbe. A decimális számot megadó byte-ot vagy byte-okat négy-négy bitenként felosztjuk.
A négy bit által alkotott szám kettő hatványaiként felírva s ennek összegét véve kapjuk meg a hexadecimális számot. Két byte-n a legnagyobb ábrázolható szám a 65535 ami FFFF-nek felel meg. (előjel nélkül)
pl.: 4123d=0 0 0 1 | 0 0 0 0 | 0 0 0 1 | 1 0 1 1 b = 1 0 1 B h
Átváltás decimális számrendszerből hexadecimális számrendszerbe
A decimális számrendszerbeli számokat tizenhattal való maradékos osztással tudjuk hexadecimális számrendszerbeli számmá alakítani.
Az átalakítandó számot osszuk el tizenhattal. Minden osztásnál jegyezzük fel a maradékot. Folytassuk az egészrésszel való osztást, amíg nullát nem kapunk. Figyeljünk arra, hogy 10-től felfelé az értékeket betűkkel jelöljük!
Lássunk erre egy példát! Az átalakítandó szám: 101510.
Az így kapott maradékokat lentről felfelé olvasva kapjuk meg a hexadecimális számot: 3F716.
Átváltás hexadecimális számrendszerből decimális számrendszerbe
A hexadecimális számrendszerbeli számokat úgy válthatjuk át decimális számrendszerbe, hogy a hexadecimális szám egyes számjegyeit megszorozzuk a hozzájuk tartozó helyi értékekkel, majd az így kapott értékeket összeadjuk.
Például az A516 hexadecimális szám decimális értékét az alábbi módon számíthatjuk ki.
Kettes komplemens kód
A számítógép a számokat mindig meghatározott számú számjeggyel ábrázolja. Ez a számolás során nagyon előnyös, de a számok, amelyeket ábrázolni kell nem mindig ugyanannyi jegyűek. A megoldás erre nagyon egyszerű: egészítsük ki balról a számot nullákkal, hogy a kívánt mennyiségű számjegyből álljon.
A számítógépen leggyakrabban 2 byten ábrázolt, 16 számjegyből álló bináris számokkal találkozhatunk. (Ez az egész típusú adat a programozásban.)
Két byte-on kettes komplemens kódban a -215 -215-1-ig terjedő egész számokat tudjuk ábrázolni. A 16. bithelyen az előjelbit áll (1 – negatív, 0 – nem negatív)
A természetes számok ábrázolása egyszerűen a szám kettes számrendszerbeli alakjával történik. Az előjelbit 0. Ha szükséges, az „üres helyeket” az előjelbitig 0-kat töltjük fel.
Pl. a 18-at 2 bájton ábrázolva: a 0 0000000 00010010 alakot kapjuk.
Negatív szám kódja itt a szám abszolútértékének komplemense, amit a következő módszerrel lehet kiszámolni:
- Írjuk fel kettes számrendszerben, az ábrázolásban használt biteknek megfelelő számú számjeggyel a szám abszolút értékét.
- Fordítsuk meg a biteket: a 0 helyett írjunk 1-et, az 1 helyett pedig 0-át.
- Adjunk hozzá a kapott számhoz 1-et.
Az így kapott számot nevezzük a szám kettes komplemens kódjának.
Így a -18 alakja: 1 1111111 11101110
Ezekkel a számokkal bitenként végezhetünk műveleteket, így rendkívül gyors a számolás.
Ezt a számábrázolási módot fixpontos számábrázolásnak is nevezik.
Lebegőpontos számábrázolás
Induljunk ki a számok normálalakjából. A 6*1023 szám három részből áll: a szorzó (6), a hatványalap (10), illetve a kitevő (23). Ezt kell átírnunk kettes alapú hatványra, illetve kitevőre, pl.: r*2m.
10-es alapú példa: 123,456 = 0,123456 * 103
Hasonlóan kell eljárni a kettes számrendszerben is.
A tizedes törteket át lehet írni kettes számrendszerbe. A 0,52 ot pl. úgy, hogy a törtrészét 2-vel szorozzuk, és feljegyezzük az eredmény egészrészét. Az első szorzás után 1,04-et kapunk, így a kettede tört alakja: 0.1. Ha tovább folytatjuk, akkor 0,04-ből 0,08-at, majd 0,16-ot, 0,32.t, 0,64 és 1,28-at kapunk. Ha ilyen pontosságig számolunk a kettedes törtünk 0.100001-et kapunk. Most megint a törtrészét, a 0,28-at kell 2-vel szorozni, ha még pontosabban szeretnénk megadni a számot.
A 18,52 kettes számrendszerbeli alakja így: 10010.100001 lesz. A lebegőpontos ábrázolásnál a kettedes pontot elvisszük az első 1-es elé, 5 helyiértékkel mozgatva. Az így kapott szám: 0.10010100001. Így az 5-öt és a 0.10010100001 számot kell eltárolni. A kettedes pont utáni 1-es nem ad információt (mindig 1-es), ezért ezen a helyen az előjelet tároljuk. 0-t, ha a tizedestört pozitív, 1-est, ha negatív. A szám nagyságrendjének (karakterisztikájának) tárolása helyett egy nála 128-cal nagyobb számot tárolunk. Így elegendő csak pozitív számokat tárolni. Emiatt 128-cal eltolt nullpontú tárolásnak nevezzük a karakterisztika ábrázolását.
Ezzel a módszerrel elég gyorsan és jól tudnak működni a CPU-k.
Karakterek ábrázolása
Karakter: betű, számjegy, írásjel, egyéb jel, ami a karakter módban egy helyen megjeleníthető. A karakter egy byte-on kódolt: tehát 256 féle lehet.
A különböző nyelvekben előforduló karakterek ábrázolásához kódkészleteket, kódtáblákat használnak. A kódtábla minden egyes karakteréhez egy 2-es számrendszerbeli szám tartozik.
Ascii-kód:
American Standard Code for Information Interchange) egy karakterkészlet és karakterkódolási szabvány, amely a latin ábécén alapul és az angol nyelvben és sok nyugat-európai nyelvben használatos betűket tartalmazza. Leggyakoribb felhasználása a számítógépeken illetve szövegeket kezelő egyszerű eszközökön használt szövegek reprezentációja.
Kezdetben 7 biten ábrázolták a karaktereket, így 128 féle karaktert valósíthattak meg. A 0-tól a 127-ig terjedő számok bináris alakjai mind egy-egy karaktert jelentenek, a szóköz például a 32-es kódú karakter a szóköz kódja.
Ez a 128 karakter később kevésnek bizonyult, hiszen nem férnek bele a nemzeti karakterek sem. Ezért a karakterek ábrázolására több helyet: 8 bitet (1 bájtot) szántak, így már 256 féle karakter vált alkalmazhatóvá. De az első 128-at nem bolygatták, hanem kibővítették az eddigi kódtáblát másik 128 karakterrel. Többféle kiegészítés is létezik, tekintettel a nemzeti karakterekre és az operációs rendszerekre, így például léteznek a következő (256 elemű) kódtáblák:
437-es (USA) kódtábla: többféle nemzeti karakterrel, grafikus jelekkel,
852-es (Latin II vagy Szláv) kódlap: a magyar, lengyel, cseh ábécék latin betűktől eltérő betűit és grafikus jeleket tartalmaz.
Unicode:
Unicode az egyik elterjedt megoldás a természetes nyelvekben megtalálható különböző írásjelek egységes kódtáblába foglalására.
A számítógépek csak számokat képesek kezelni, ezért ki kellett találni valamilyen megoldást arra, hogy ember által érthető információkat közöljenek. Kézenfekvő volt egy megállapodás, miszerint egy bájt tárol egy karaktert, ami 256 karakter ábrázolását tette volna lehetővé. Az első számítógépek angolszász nyelvterületen készültek, és a betűket ennek megfelelően válogatták össze, és megállapodtak abban, hogy melyik szám melyik betűt jelenti.
A személyi számítógépekkel együtt az ASCII terjedt el, ami eredetileg csak 7 bitet használt, ezzel 127 különböző karaktert írt le. Ezek tartalmazták az angol ábécé kis- és nagybetűit, a számokat és sok nem nyomtatható karaktert.
Később felmerült az igény arra, hogy az egyes nemzetek a saját nyelvükön kommunikáljanak a számítógéppel. Ekkor az ASCII kódtábla 127-nél nagyobb elemeinek a jelentését úgy határozták meg, hogy az csak egy megadott kódlap esetén értelmezhető egyértelműen, vagyis például a 250-es szám jelentése (az általa ábrázolt karakter) attól függött, hogy milyen kódtábla szerint értelmeztük az adott szöveget.
Ezek csak részmegoldások voltak és sok problémát okozott, hogy nem minden esetben lehetett megállapítani az ékezetes karakterek (127-nél nagyobb számok) eredetét.
Az Unicode rendszer 16 bitet használó rendszer, tehát 216 (több, mint 65000 !) féle karakter ábrázolására képes. Kompatibilis az ASCII kódtáblával (az első 128 jel mindkettőben ugyanaz), tartalmazza a ma használt nyelvek (sőt több holt nyelv) karaktereit (még ógörög, héber, arab, tibeti, tamil, kínai-koreai-japán, cirill és további betűket is), egyéb grafikus karaktereket, törtszámok jeleit, stb.
A jelenleg használt Unicode formák közül a legelterjedtebb az UTF-8, ami változó hosszúságú kódolással (8-64 bit) jeleníti meg a Unicode jeleit.
Az UTF-8 (8-bit Unicode Transformation Format, 8 bites Unicode átalakítási formátum) egy veszteségmentes, változó hosszúságú Unicode karakterkódolási eljárás. Bármilyen Unicode karaktert képes reprezentálni, ugyanakkor visszafelé kompatibilis a 7 bites ASCII szabvánnyal. Az UTF-8 kódolás különösen alkalmas 8 bites átviteli közegek számára, mint amilyen az e-mail vagy a weblapok.
UTF-8 kódolás egyszerre támogatja mindezen karakterek megjelenítését, és így minden nyelv egységes kódolást tud használni, megelőzve a betűk nem tervezett „átalakulását”.
Ha csak két színt (például feketét és fehéret) akarunk használni, akkor ennek nyilvántartására elég 1 bit, hiszen a 0 lehet az egyik szín kódja, az 1-es pedig a másik színé. Vagy felfoghatjuk úgy is, hogy (például a képernyőn) van szín (világít-e fehérrel) vagy nincs szín (a képernyő sötét marad).
Színmélységnek nevezzük a rendelkezésünkre álló színek számát. Magát a színkészletet palettának is nevezik. Minden színnek kell, legyen valamilyen (bináris) számkódja.
Egy szürkeárnyalatos képhez már a feketétől a fehérig több árnyalatra van szükség, jellemző ilyenkor a 256-féle árnyalat használata. Azért éppen 256, mert 1 bájton = 8 biten éppen 28 = 256 féle szám tárolható, és azok mind egy-egy árnyalat kódjai. Egy konkrét árnyalat tárolásához tehát ezzel a módszerrel 1 bájt szükséges. A színes, részletgazdag képek ábrázolásánál fontos a színmélység, ami számszerűsíti, hogy hány egyedi szín áll rendelkezésre egy kép színpalettáján. A 32 bites színmélység azt jelenti, hogy 1 képpontot 8 byte-on tudunk tárolni, 232 szín van benne.
A hangok tárolásának ismertetése előtt vizsgáljuk meg az analóg és digitális jeleket, illetve azok egymásba alakításának lehetőségét.
Lapozz a további részletekért