A számokat többféleképpen jelölték az emberek a történelem során. A ma legismertebb ábrázolásmód a helyiértékes számábrázolás. Egy másféle számábrázolásra jó példa az ismert római számok leírása. A helyiértékes számábrázolás esetén tudni kell az alapszámot. Az általunk használt számrendszer a 10-es, más néven decimális számrendszer, amelynek alapszáma 10. A következőkben tárgyszerűen és röviden olvasható az általunk használt számrendszerek jellemzése.
A bináris számrendszert kettes számrendszernek is nevezik.
A számrendszer alapszáma: 2.
A számrendszer számjegyei: 0; 1.
A számrendszer helyiérték táblázata:
… |
8 |
4 |
2 |
1 |
1/2 |
1/4 |
… |
… |
23 |
22 |
21 |
20 |
2-1 |
2-2 |
… |
A decimális számrendszert tízes számrendszernek is nevezik.
A számrendszer alapszáma: 10.
A számrendszer számjegyei: 0; 1; 2; 3; 4; 5; 6; 7; 8; 9.
A számrendszer helyiérték táblázata:
… |
1000 |
100 |
10 |
1 |
1/10 |
1/100 |
… |
… |
103 |
102 |
101 |
100 |
10-1 |
10-2 |
… |
A hexadecimális számrendszert tizenhatos számrendszernek is nevezik.
A számrendszer alapszáma: 16.
A tizenhatos számrendszerben nem tudunk tizenhat különböző számot leírni, mivel csupán tíz számjegyet ismerünk. Ésszerű és egyértelmű megoldást ad, ha a 9 feletti számjegyeket betűkkel helyettesítjük: A–10; B–11; C–12; D–13; E–14; F–15.
A számrendszer számjegyei: 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; A; B; C; D; E; F.
A számrendszer helyiérték táblázata:
… |
4096 |
256 |
16 |
1 |
1/16 |
1/256 |
… |
… |
163 |
162 |
161 |
160 |
16-1 |
16-2 |
… |
A konverzió azt jelenti, hogy az egyik számrendszerből hogyan lehet egy másik számrendszerbe átírni a kívánt számot.
Egy tízes számrendszerbeli egész számot a kettes számrendszerbe a következő algoritmussal konvertálhatunk (válthatunk) át: a decimális számot addig osztjuk kettővel, amíg a hányados nulla nem lesz. A maradékokat mindig feljegyezzük, majd a maradékot az utolsótól visszafelé olvasva, megkapjuk a bináris alakot.
Példa:
11710 = 11101012
|
|
|
maradék: |
|
: 2 = 58 |
|
1 |
58 |
: 2 = 29 |
|
0 |
29 |
: 2 =4 |
|
1 |
14 |
: 2 = 7 |
|
0 |
7 |
: 2 = 3 |
|
1 |
3 |
: 2 = 1 |
|
1 |
1 |
: 2 = 0 |
|
1 |
Egy tízes számrendszerbeli egész számot a tizenhatos számrendszerbe a következő algoritmussal válthatunk át: a decimális számot addig osztjuk tizenhattal, amíg a hányados nulla nem lesz. A maradékokat mindig feljegyezzük, majd a maradékot az utolsótól visszafelé olvasva, megkapjuk a hexadecimális alakot. Természetesen a 9-nél nagyobb maradékokat a hexadecimális számrendszerben meghatározott jegyekre kell átírni.
Példa:
45910 = 1CB16
|
|
|
maradék: |
|
: 16 = 28 |
|
11 |
28 |
: 16 = 1 |
|
12 |
1 |
: 16 = 0 |
|
1 |
Egy bináris számot átválthatunk decimálissá, ha a számjegyeket a helyiértékükkel összeszorozzuk, majd a szorzatokat összeadjuk.
Példa:
10100012 = 8110
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|
1 |
0 |
1 |
0 |
0 |
0 |
1 |
|
ò |
ò |
ò |
ò |
ò |
ò |
ò |
|
64x1+ |
32x0+ |
16x1+ |
8x0+ |
4x0+ |
2x0+ |
1x1 |
= 81 |
Egy bináris számot átválthatunk hexadecimálissá, ha a számjegyeket a legkisebb helyiértékkel kezdve négyesével csoportosítjuk, majd a négy számjegyet sorba váltjuk át hexadecimálissá.
|
|
|
bináris |
hexadec. |
decimális |
||
1. példa: 1 0011 1111 01012 = 13F516 |
|
|
0000 |
0 |
0 |
||
|
|
|
|
|
0001 |
1 |
1 |
1 |
0011 |
1111 |
0101 |
|
0010 |
2 |
2 |
ò |
ò |
ò |
ò |
|
0011 |
3 |
3 |
1 |
3 |
F |
5 |
|
0100 |
4 |
4 |
|
|
|
|
|
0101 |
5 |
5 |
|
|
|
|
|
0110 |
6 |
6 |
2. példa: 1110000110110002 = 70D816 |
|
|
0111 |
7 |
7 |
||
|
|
|
|
|
1000 |
8 |
8 |
111 |
0000 |
1101 |
1000 |
|
1001 |
9 |
9 |
ò |
ò |
ò |
ò |
|
1010 |
A |
10 |
7 |
0 |
D |
8 |
|
1011 |
B |
11 |
|
|
|
|
|
1100 |
C |
12 |
|
|
|
|
|
1101 |
D |
13 |
|
|
|
|
|
1110 |
E |
14 |
|
|
|
|
|
1111 |
F |
15 |
Egy hexadecimális számot átválthatunk decimálissá, ha a számjegyeket a helyiértékükkel összeszorozzuk, majd a szorzatokat összeadjuk.
Példa:
1A316 = 41910
256 |
16 |
1 |
|
1 |
A |
3 |
|
ò |
ò |
ò |
|
256x1+ |
16x10+ |
3x1 |
= 419 |
Egy hexadecimális számot átválthatunk binárissá, ha a számjegyeket a legkisebb helyiértékkel kezdve négy bináris számjeggyé alakítjuk.
|
|
|
|
|
bináris |
hexadec. |
decimális |
1.példa : 13F616 = 11110011000101012 |
|
|
0000 |
0 |
0 |
||
|
|
|
|
|
0001 |
1 |
1 |
|
|
|
|
|
0010 |
2 |
2 |
F |
3 |
1 |
6 |
|
0011 |
3 |
3 |
ò |
ò |
ò |
ò |
|
0100 |
4 |
4 |
1111 |
0011 |
0001 |
0101 |
|
0101 |
5 |
5 |
|
|
|
|
|
0110 |
6 |
6 |
|
|
|
|
|
0111 |
7 |
7 |
2.példa: 1A16 = 1110102 |
|
|
1000 |
8 |
8 |
||
|
|
|
|
|
1001 |
9 |
9 |
|
|
|
|
|
1010 |
A |
10 |
|
3 |
A |
|
|
1011 |
B |
11 |
|
ò |
ò |
|
|
1100 |
C |
12 |
|
11 |
1010 |
|
|
1101 |
D |
13 |
|
|
|
|
|
1110 |
E |
14 |
|
|
|
|
|
1111 |
F |
15 |
A számoknak létezik valódi és nem valódi ábrázolása. Az első a BCD (Binary Coded Decimais} kód alapján történő ábrázolás, a második a bináris fixpontos, illetve a bináris lebegőpontos ábrázolás.
A BCD-kódú ábrázolásnál a számot ugyan decimálisán ábrázoljuk, azonban bináris számjegyekkel, számjegyenként 4 biten, úgynevezett tetrádokban. Az egyes számjegyeknek a bináris értékét a már ismert szabályok szerint képezzük. E szerint egy négyjegyű decimális szám 4-szer 4 biten, azaz két bájton tárolható. A BCD ábrázolás általában előjel nélküli, ha mégis tárolni kell az előjelet (negatív számok esetén), akkor a számot balról egy bájttal kiegészítjük, aminek a bal szélső bitjén álló l-es jelzi, hogy a szám negatív, a bájt többi bitje nulla lesz
A valódi számábrázolásnál a számot kettes számrendszerben tároljuk, az egész számokat fixpontosán, a valós számokat pedig lebegőpontosán. A fixpontos ábrázolásnál a tizedesvessző helye rögzített, ezért azt nem tároljuk. Az egész számoknál ez a tizedesvessző a legkisebb helyi értéktől jobbra van. A lebegőpontos számoknál a tizedesvessző nem rögzített, helye változhat.
Az egész számok binárissá alakítása a már ismert módon történik. Természetesen nem csak pozitív, hanem negatív számokat is ábrázolnunk kell. Az előjel tárolására a bal szélső bit szolgál, ha ez 0 - a szám pozitív, ha l - a szám negatív. Nézzünk néhány példát!
+31 = 00011111
-31 = 10011111:
+9541 = 0010010101000101
-9541 = 1010010101000101
A számoknál a bal szélső, előjelbitet félkövér betűkkel szedtük. Látható, hogy a 9541 ábrázolása ily módon egészen más bináris számsort eredményezett, mint a BCD ábrázolásnál.
Az egész számoknál a kivonást összeadásra vezetjük vissza, ehhez használjuk a kettes komplemens kódot. A kód elkészítéséhez először elő kell állítani az egyes komplemenst, melyet úgy képezünk, hogy a számot átírjuk kettes számrendszerbe, majd bináris számjegyeit ellentétes értékűre cseréljük, azaz 0 helyett l-t, l helyett pedig 0-t írunk. Az így előállított egyes komplemens kódhoz binárisan egyet adunk, és az így keletkező eredmény lesz a kettes komplemens.
Az ábra
felső részében mutatunk példát a kettes komplemens képzésére, az
alsó
részben pedig a +3 l-hez hozzáadjuk a kettes komplemensét. Az eredmény
egy 9
bitből álló szám, de ha a számokat egy bájton ábrázoljuk, akkor az első
bitet a rendszer levágja, tehát az
összeadás eredménye nulla lesz. A kettes
komplemens értéke tehát -31-nek felel meg, így a 31-31 műveletet összeadásra
vezettük vissza. Binárisan ugyanúgy
adjuk össze a számokat, mint decimálisán.
Ha elérjük a számrendszer alapszámát, akkor
nullát írunk, és egyet átviszünk a
következő nagyobb helyi értékre.
Például l meg l egyenlő 10.
Az egész számokat különböző hosszban tároljuk, vannak előjel nélküli és előjeles egész számok. A szokásos tárolási hosszak az l, 2 és 4 bájt. A tárolási hossz megszabja a legnagyobb és legkisebb tárolható értéket. Ha N biten tárolunk egész számokat, akkor a legnagyobb előjel nélküli decimális egész a 2N-1.
Az egész számokkal elvégezhető az összeadás, kivonás, szorzás művelete. A számítástechnikai rendszerek az utóbbi időben még két további műveletet definiálnak, az egész osztás és a maradékképzés műveletét. Az első két egész szám hányadosának egész részét, a maradékképzés pedig az osztási maradékot eredményezi.
A valós számok tárolásánál azt használjuk fel, hogy minden valós szám felírható normál alakban. Ellentétben a matematikával, ahol a normálalakra hozás l és 10 közötti számot eredményez, a számítástechnikában a számokat 0 és l közötti értékűvé alakítjuk. Nézzünk néhány példát!
-123,25 = -0,12325-103;
0,00347 = 0,347-10-2
Általában
ahol M a mantissza, azaz a tizedes jegyek sorozata binárisra átváltva. Mivel minden normálalakú számban az egész rész nulla, ezt és a tizedesvesszőt nem kell tárolni. B a számrendszer alapszáma, az e pedig a hatványkitevő, a karakterisztika.
A valós számokat 4 vagy 8 bájt hosszban tároljuk, de a hossz ettől eltérő is lehet. Általában a karakterisztika tárolása l bájton valósul meg, így a mantissza tárolására marad 3 vagy 7 bájt. A négybájtos valós számot szokás egyszeres pontosságú valósnak, a 8 bájtosat pedig kétszeres pontosságú valósnak nevezni, a pontosan ábrázolt számjegyek száma alapján, ami az első esetben 7-8, a második esetben pedig 15-16 decimális számjegy.
A mantissza előjeles, itt tároljuk a szám előjelét. A hatványkitevő is előjeles, de itt nem a szokásos előjelbittel különböztetjük meg a pozitív és negatív számokat. A karakterisztikánál az úgynevezett 128-többletes kódolást alkalmazzuk. E szerint a 0 érték -128-nek, 255 pedig +127-nek felel meg, így a karakterisztikát előjel nélküli egész számként tárolhatjuk. A normál alakú szám hatványkitevőjéhez 128-at kell adni, úgy kapjuk meg a karakterisztikát.
A valós számok körében mind a négy alapművelet elvégezhető.
Bt szeretnénk szólni arról, hogy a számítástechnikai rendszerekben önálló műveletként definiált az előjelváltás, és néhány rendszer ismeri a hatványozás müveletét is. A műveletek kiértékelése pontos szabály, a precedencia szabály alapján történik. E szerint a műveletek végrehajtási sorrendje: hatványozás, előjelváltás, szorzás és osztás, összeadás és kivonás. Ezek után következnek a relációk és a logikai műveletek. A szorzás és az osztás, valamint az összeadás és a kivonás egy szinten helyezkednek el. Az egy szintű műveletek között balról jobbra kell a kijelölt műveleteket végrehajtani. Természetesen zárójelezéssel megváltoztathatjuk a precedencia szabály szabta sorrendet. A zárójeleket egymásba is lehet ágyazni, ekkor belülről kifelé történik a kiértékelés.