Ugrás a tartalomhoz

Gépi számábrázolás

Ellenőrzött
A Wikipédiából, a szabad enciklopédiából

A modern - digitális és kétállapotú (bináris) elemekből épülő - számítógépekben a számadatokat a 2-es helyiértékes számírás szerint kódoljuk. A bináris számjegyeket - az egyest (1) és a zérust (0) - a számítógép áramköreinek, az operatív memóriának, az adatforgalmat lebonyolító vonalaknak stb. két jól megkülönböztethető fizikai állapota képviseli (pl.: nyitva-zárva az áramkör, pozitív-negativ a polaritás stb.) Egy ilyen bináris tároló egység a bit (ang.: BInary uniT).

A számítógéphez kapcsolódó mobilis adathordozókon - CD, pendrive, floppy, mágneskártya stb. - való megjelenítés a belső adatábrázolástól csak a média fizikai rendszerében tér el. A BCD kódban (Binary Coded Decimals) a 10-es számrendszerben felírt számok jegyeit karakterként ábrázolják. Ma már a legtöbb helyen csak a tiszta bináris kódokat használják. A relációs (SQL) adatbázisokban azonban szokott lenni BCD-vel ábrázolt szám típus, például az IBM DB2 tartalmaz ilyet. A pénzügyi, számlázási kerekítési szabályok a BCD-vel vannak jó összhangban, hiába pontosabb egy lebegőpontos ábrázolás.

A bináris kódok mindegyike fix hosszúságú, s a kód típusától függően különbözőképpen lehet kiolvasni a kódolt szám előjelét: előjel bit. A szó többi bitjét, amelyek a szám abszolútértékét kódolják helyiérték biteknek nevezünk. (Az általános konvenciótól eltérően a gépi aritmetika terminológiája a nulla szám kódjának első bitjét is pozitív előjelbitnek nevezi.)

A bináris számábrázolásnak kétféle alapformáját használjuk:

  • fixpontos kódok. Itt a jelsorozatban a jegyek helyiértéke (a tizedespont) rögzített. Ez a köznapi számírásunk megfelelője.
  • lebegőpontos kódok. Itt a számot (X) két komponens, a mantissza (m) és a karakterisztika (c) a következőképpen kódolja: X = m × 2C.
(A két elnevezésben az angolszász számírási szokásnak megfelelő tizedespontról van szó. A '70-es években kísérlet történt a kontinensen használatos tizedesvesszőre utaló fix- ill. lebegővesszős kifejezés bevezetésére.)

Fixpontos kódok

[szerkesztés]

Egyenes-kód (vagy abszolútértékes kód)

[szerkesztés]

A pozitív számokat és a nullát egy vezető zérussal, e számok ellentettjét egy vezető egyessel írjuk. Például: +1 = 0001, és -1 = 1001. E kód jellegzetessége a negatív nulla, ami formálisan képezhető a nulla szám 0000 kódjából az előjelbit átváltásával: 1000.

Komplemens-kód (vagy kettes komplemens kód)

[szerkesztés]

A legáltalánosabb fixpontos bináris kód a nullát kódoló 0000-ból előre (+1 = 0001) és vissza (-1 = 1111) számlálással adódik (ahogyan a decimális műszereken a 0000-től visszaforgatással a 9999).

Többletes-kód

[szerkesztés]

Ebben a kódban minden számot 2n-1 = 1000 többlettel ábrázolunk. Az n = 4 biten ez a többlet 23 = 8 = 1000. Ennél a kódnál a negativ előjelbit 0.

Negációs-kód (egyes komplemens kód)

[szerkesztés]

A pozitív számokat és a nullát ugyanúgy írjuk, mint a természetes számírásban. A pozitív számok ellentettjét a jegyek mindegyikének átfordításával (negáció) kapjuk. Például: +1 = 0001 és ebből -1 = 1110. Ebben a rendszerben is létezik a negatív nulla: 1111

A negatív nulla a műveletvégzés eredményeként keletkezhet. Pl. a nulla szám és egy negativ szám szorzásakor az egyenes kódban vagy két azonos abszolútértékű szám összeadásakor negációs kódban.

A számítógép kiépítésétől (hardware) és a gépen futó programtól (software) függ a kód hossza - a bitek száma - és ezzel a legnagyobb ábrázolható szám abszolútértéke, más szóval az ábrázolható számtartomány.

Lebegőpontos kódok

[szerkesztés]

Az olyan feladatban, melyben különböző nagyságrendű számok szerepelnek, rendkívül nagy lesz a számkódok redundanciája: a kis számoknál az elején, a nagyoknál a végén sok helypótló nullát kell alkalmazni. A számok X = m × 2C exponenciális alakjának (normál alak, scientific notation) használatával ez ebből eredő hibákat küszöbölhetjük ki. Általában a jelölést háromféleképpen szabványosítják (normalizálás):

  • A tudományos decimális írásmódban olyan mantisszát választunk, melynek abszolútértéke 1 és 10 között van: 1 ≤ |m| < 10
  • A műszaki gyakorlatban a mantissza 1-es helyi értéke a mértékegységek (km/m/mm, kg/g/mg stb.) valamelyik alapegységével esik egybe. Ezért a kitevőt 3 többszörösének, a mantisszát 1 ≤ |m| < 1000 közöttinek választják.
  • A számítástechnikában a mantissza normálása: 1/2 ≤ |m| < 1. Így minden szám mantisszája valódi tört, (csak negatív kitevőjű helyi értékei vannak). Az általános gyakorlatban a nulla számot nem szoktuk exponenciális alakban kezelni. A számítógép belső szerkezete megköveteli, hogy ekkor is egy (m,c) számpárt használjuk. A triviális m = 0 mantissza mellett a minimális karakterisztikával kódoljuk a normál (gépi) nullát.

A mantissza hossza (bitjeinek száma) határozza meg az adatok relatív pontosságát, a karakterisztikáé az ábrázolható számtartomány nagyságát. (A táblázat első oszlopában a mantissza + karakterisztika hossza szerepel.)