Számrendszerek az informatikában

A Wikipédiából, a szabad enciklopédiából

A digitális informatikában minden információt kettes számrendszerbeli számok segítségével írnak le. A számjegyeket biteknek nevezik. Egy-egy bitet hardver szinten általában egy vezeték szállít vagy egy elemi memóriacella tárol két jól elkülöníthető feszültségszint segítségével. Ez a megközelítés relatív könnyűvé teszi az információ elektronikus kezelését.

Ezen alaphelyzetet figyelembe véve a szakemberek számára praktikus volt bevetni olyan nem 10-es számrendszereket, melynek alapja 2 valamely hatványa. A leggyakrabban használt ilyen a 2-es (bináris), a 8-as (oktális) és a 16-os (hexadecimális). A tízes számrendszernek nincsen különleges informatikai szerepe.

Bináris[szerkesztés | forrásszöveg szerkesztése]

Az adott számrendszerben szerepeltethető számjegyek: 0 és 1

A kettes számrendszer is a súlyozott, helyiértékes számrendszerekhez tartozik. Alapja a 2, ennek egész számú hatványai adják a helyiértékeket. Tört számokat is lehet konvertálni kettes számrendszerbe, ilyenkor a 'tizedes vessző' után következő (decimális számrendszerben az egynél kisebb) érték kettőnek szintén hatványaként lesz kifejezve, de a negatív hatványokat használjuk.

Oktális[szerkesztés | forrásszöveg szerkesztése]

Az adott számrendszerben szerepeltethető számjegyek: 0-tól 7-ig.

Több programozási nyelv (pl. C/C++) és futtatókörnyezet (pl. bash) a nullával kezdődő számokat nem decimálisként, hanem oktálisként értelmezi. Ez alól a hexadecimális kivétel, amelyet 0x-szel kell kezdeni. A UNIX-szerű operációs rendszereken a jogosultságokat oktálisan is megadhatjuk illetve kiolvashatjuk. Lásd chmod.

Hexadecimális[szerkesztés | forrásszöveg szerkesztése]

Képernyőkép egy tipikus hexadecimális szövegszerkesztőről (hex editor)

Az adott számrendszerben szerepeltethető számjegyek: 0-tól 9-ig és az A, B, C, D, E, F betűk, melyek értéke rendre 10, 11, 12, 13, 14, 15. Az azonos kis és nagy betűk ugyanazt az értéket jelölik. Számkonstansok megadásakor 0x-szel (C/C++ stílus), #-tel (HTML stílus), $ (Pascal stílus) szokták kezdeni vagy h-val (Assembly stílus) szokták zárni.

Főként programozók és informatikusok kedvelik, bináris fájlok értelmezésében van segítségükre. Egy hexadecimális számjegy pontosan 4 bitet ír le, kettő pedig egy bájtot.

Átszámítások[szerkesztés | forrásszöveg szerkesztése]

Decimálisból binárisba[szerkesztés | forrásszöveg szerkesztése]

Adott számjegyet (decimális, azaz tízes számrendszer) sorozatosan elosztunk 2-vel. Az osztás maradékát feljegyezzük (0, vagy 1), majd az osztás során az eredmény egészrészét osztjuk tovább. Pl.:

dec  maradék  dec  maradék               maradék   1 0 1 1  1  1
------------  ------------               -----------------------
                                         hányados |1|2|5|11|23|47
47 | 1        24 | 0
23 | 1        12 | 0
11 | 1         6 | 0
 5 | 1         3 | 1
 2 | 0         1 | 1
 1 | 1

A maradékoszlop számsorát a decimális sor utolsó egyesével együtt felírjuk lentről felfelé és megkapjuk az adott decimális szám bináris megfelelőjét.

47 → 101111 (informatikában: 00101111) jelen esetben a két 0 eléírása csak abban az esetben igaz,
ha a 32 bites IP címzésnél az oktetenkénti nyolcbitnyi értékre van szükségük.
Abban az esetben a valóban hiányzó (jelen esetben) két 0 értéket a bináris számsor elé kell írni.
24 →  11000 (informatikában: 00011000)jelen esetben a három 0 eléírása csak abban az esetben igaz,
ha a 32 bites IP címzésnél az oktetenkénti nyolcbitnyi értékre van szükségük.
Abban az esetben a valóban hiányzó (jelen esetben) három 0 értéket a bináris számsor elé kell írni.

Binárisból decimálisba[szerkesztés | forrásszöveg szerkesztése]

Mint minden számrendszer, a bináris is helyiértékek összegével írható fel. Azaz 20-on, 21-őn… Azokat a helyiértékeket, melyek 1-essel vannak jelölve, decimálisan összeadjuk, az összeg a decimális érték lesz.

Pl.:

"helyiértékesítve":
         25 24 23 22 21 20
bináris: 1  0  1  1  1  1

A számjegyek helyiértékeinek összegét számolva:

25+23+22+21+20=32+8+4+2+1=47

Szokásos, hogy az informatikában a byte kódolás miatt nyolc számjegyen (vagy annak egész számú többszörösén) számolnak, azaz az iménti számot így lehet 8 bites alakban felírni:

bináris: 00101111

Műveletek[szerkesztés | forrásszöveg szerkesztése]

Negáció[szerkesztés | forrásszöveg szerkesztése]

Logikai NEM

Bináris számrendszerben (bájt kódolással, azaz 8 helyiértékre számítva):

         27 26 25 24 23 22 21 20
bináris: 0  0  1  0  1  1  1  1

Minden számjegy ellenkezővé alakítása (0-ból 1-es, 1-ből 0)

         27 26 25 24 23 22 21 20
bináris: 1  1  0  1  0  0  0  0

Shift (bitenkénti eltolás)[szerkesztés | forrásszöveg szerkesztése]

Szintén jellemzően a bináris számrendszerre alkalmazzuk. Az adott számsort „eltoljuk” balra (Shift left – SHL), vagy jobbra (Shift right – SHR), a „kieső” számjegyek elvesznek az eltolás irányába, a másik oldalról 0-val töltjük fel a számsort. A Shift művelet szorzást, illetve (egész)osztást eredményez a bináris számon:

SHL (1)

input:  0 1 0 0 1 1 0 1  →  77
output: 1 0 0 1 1 0 1 0  → 154

SHR (1)

input:  0 1 0 0 1 1 0 1  →  77
output: 0 0 1 0 0 1 1 0  →  38