Tartalomjegyzék
Számábrázolás
- Szerző: Sallai András
- Copyright © 2012, Sallai András
- Szerkesztve: 2012, 2014, 2015, 2017, 2023
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Osztályozás
A számítógépeken a számokat fixpontos vagy lebegőpontos alakban ábrázoljuk. Volt kísérlet a decimális ábrázolásra is, az végül nem terjed el.
- Fixpontos
- előjel nélkül
- előjeles
- abszolút értékes
- kettes komplemens
- eltolásos (többletes)
- Lebegőpontos
- Decimális
Fixpontos számábrázolás
Előjel nélkül
Pl.: 6-ot nyolc helyen ábrázolva:
00000110
Ha nem fér el a szám nyolc helyen túlcsordulás történik. A számok csak nulla vagy pozitívak lehetnek.
Előjeles ábrázolás
Negatív számok is lehetnek
Abszolút értékes
Az első bit mindig az előjel. Rendszerint ha a szám negatív az első bit 1-es. Ha null vagy pozitív szám akkor az első bit 0. Pl. -6 ábrázolása:
10000110
Kettes komplemens
Veszem a szám kettes komplemensét, így ábrázolom. Pl. -6
11111010
Eltolásos
2n-1hozzáadok minden számhoz. Az n mutatja meg, hány helyen ábrázolom a számot. Pl. 8 helyen ábrázolom a 6-ot:
n = 8
2n-1
akkor
27 = 128
(-6) + 128 = 122
122 binárisan
01111010
Lebegőpontos számábrázolás
Egyszerűen
A számot a következő alakban írjuk fel:
Tulajdonképpen a számot hatványkitevős alakban írjuk fel.
Röviden ennyi. De nézzük részletesen.
Az „m” a mantissza szóból. Az „a” az alap szóból. A „k” kitevő szóból.
A kitevő helyett szoktak még exponenst is használni.
Angol nyelven a mantissza: mantissa, de szinonimák a significand és a coefficient.
Részletesen
Matematika óráról tudjuk, hogy
1,0000 * 10 = 10,000
Vagyis egyszer tíz az tíz. A szorzás eredménye olyan mintha a bal oldalon álló számnál a tizedesvesszőt egyel jobbra mozdítottam volna. Ugyanígy:
1,0000 * 100 = 100,00
Olyan mintha a szorzás bal oldalán lévő számnál a tizedesvesszőt kettővel jobbra mozdítottam volna.
1,0000 * 1000 = 1000,0
Tehát 10 vagy annak valamelyik hatványával való szorzás műveletét elvégezhetjük a tizedes vessző elmozdításával is.
Most vegyük az utolsó műveletsort. Egyszer ezer az ezer. Ezer felírható tíz és száz szorzataként is:
10,000 * 100 = 1000,0
A szorzás jel baloldalán mindössze a tizedes vessző jobbra kellett mozgatni. De felírható így is:
100,00 * 10 = 1000,0
A tizedesvesszőt még egyel jobbra mozgattuk. A következő is ugyanaz:
1000,0 * 1 = 1000,0
Vegyük észre, hogy a szorzás jel jobboldalán tíz hatványait jelenítjük meg:
- 1, 10, 100, stb.
mivel:
- stb.
Ezek szerint egy számot le tudok írni egy tizedestört és tíz valamelyik hatványával többféleképpen is. Vegyük a következő számot most megismert felírási módban:
A fenti szám szimplán leírva:
De ugyanezt jelentik a következő alakok is:
Láthatjuk, hogy a vessző ide-oda mozoghat, ha változtatjuk a hatványt. Úgy is mondhatnánk a vessző ide-oda lebeg. Angolszász nyelvterületen a tizedesvessző helyett tizedes pontot használunk. Innen ered a számábrázolás neve: Lebegőpontos számábrázolás.
Az eredeti alakban: , a tizedesvesszőt nem tehetjük arrébb, mert akkor megváltozik a szám értéke. A tizedesvessző helye mindig fix. Ezért ezt fixpontos számábrázolásnak nevezzük.
A lebegőpontos számok pontossága
Ha valós számokkal dolgozunk a pontosság nem probléma, mivel mondhatjuk végtelen. A számítógépeken a memória viszont véges, így el kell döntenünk mekkora pontossággal dolgozunk. A lebegőpontos számábrázolással kapcsolatos pontosság fogalmát az Intel vezette be. Az Intel ehhez felfogadta William Morton Kahan matematikust a lebegőpontos formátum bináris ábrázolásának kidolgozásához.
Háromféle lebegőpontos formátumot vezetett be:
- egyszeres - C nyelv float
- kétszeres - C nyelv double
- kiterjesztett
Egyszeres pontosság
Dupla pontosság
Kiterjesztett pontosság
Tudományos alak
A tudományos alak másik neve: exponenciális forma.
A fenti példákból láthatjuk, hogy a szorzás jobb oldalán a hatványozás alapja állandóan tíz, mivel tízes számrendszerben számolunk. Vegyük újra az egyik példát, ábrázoljuk a tízet egy nagy „E” betűvel, de lehet akár kis „e” betű is. Az eredeti szám:
A szorzásjelet kötelező kitenni, mert nélküle egybeolvad mantissza és a számrendszer alapja. A karakterisztikát felső indexbe kell írni, ahogy a hatványozásnál ezt szoktuk. Ha egy kijelzőn nincs lehetőség a felső index ábrázolására, akkor gond van a megjelenítéssel.
A tíz cseréje egy „E” betűre:
Ekkor elhagyható a szorzás jel és a 2-es felső indexben ábrázolása:
Ekkor megkaptuk a szám tudományos alakját.
A tudományos alak esetén, jelölhetjük a kitevő előjelét például:
Természetesen negatív kitevő esetén ez kötelező.
Normalizált alak
Egyes könyvekben „normált” alak.
Láttuk fentebb, hogy lebegőpontos számábrázolással ugyanazt a számot (34) leírhatjuk több alakban is:
Ha tizedesvessző helyét úgy állítjuk be, hogy mantissza egész része 0 és 1 közötti szám lesz, akkor normalizált alakról beszélünk. Az előbbi szám esetén ez:
Decimális számábrázolás
A számot számjegyenként kódolom.
- BCD kódolás
- zónázott
- pakolt
BCD kódolás
A BCD kódolás esetén a számokat számjegyenként kódoljuk.
Zónázott kódolás
A számokat számjegyenként külön bájtban tároljuk. A bájt alsó részében tároljuk a számot, a felső részében csupa egyesekkel töltjük fel. Hexadecimálisan ez egy F. A F-et zónajelnek is nevezzük.
Pakolt kódolás
Hasonló a zónázott kódoláshoz, de a számjegyek kódolását félbájtonként végezzük.
Komplemens képzés
A komplemensek képzését bináris számokon értelmezzük.
Legyen a példa kedvéért az ötös szám binárisan:
0101
Ennek egyes komplemense, az ellentétje:
00000101 00001010
Az egyes komplemense: 11111010
A kettes komplemenst úgy képezzük, hogy 1-et adunk az előző eredményhez.
Adjunk 11111010-hoz 1-t:
11111010 +00000001 _________ 11111011
Öt kettes komplemense tehát: 11111011.
Hol használjuk ezt? A negatív számok ábrázolásánál ezt a formát használjuk. Tehát -5 ábrázoláshoz annak kettes komplemensét használom.
Miért jó ez nekem? Az összeadás könnyebb, ha a negatív számok kettes komplemensben vannak felírva. Lássunk egy összeadást. Adjuk +5-höz. -1-et.
A mínusz egy:
00000001
A mínusz egy egyes komplemense:
11111110
A mínusz egy kettes komplemense:
11111111
A mínusz egy és az öt összeadása:
11111111 +00000101 _________ 100000100
Az eredményben a baloldali 1-s eltűnik túlcsordulás miatt így marad:
00000100
Ez pedig pontosan négyet jelent. Az eredmény jó, és egyszerű volt az összeadás.
Előjelbit
A számítógépek a számábrázolás során a negatív számokat néha egy előjel bittel jelzik. Ha van egy egy bájt méretű tárolóm, akkor abban 8 bitem van. A biteket jobbról balra számoljuk.
sorszám | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
tároló | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
A nyolcadik bitet használhatjuk az előjel jelzésére. Azt mondjuk, ha nyolcadik bit 1 akkor negatív számról van szó, a nulla akkor pozitív. A legnagyobb ábrázolható szám így persze csak 7 bites. A fenti tárolóban tehát +5 van.
A következő szám egy negatív számot mutat:
sorszám | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
tároló | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
Mivel a nyolcadik bit 1 értékkel szerepel, tudjuk, hogy negatív számról van szó.
Veszem a számot:
1111011
Kivonok belőle 1-t:
1111010
Veszem az ellentétét:
0000101
És megkaptam a számot. Ez 5, de mivel be volt állítva az előjelbit, tudjuk, hogy -5.