Harmadik gyakorlat Számrendszerek
Ismétlés Tízes (decimális) számrendszer: 102 101 100
372 =3•102+7•101+2•100 alakiérték
valódi érték = aé•hé helyiérték
helyiértékek a tízes szám hatványai, a számjegyek így 0,1,2,…,8,9
Kettes (bináris) számrendszer: 27 26 25 24 23 22 21 20 1 0 1 1 0 1 0 0 helyiértékek a kettes szám hatványai, a számjegyek így 0 és 1
A számrendszerek közül a kettes és a tizenhatos számrendszer bír kiemelkedő fontossággal a computerek világában. A mai számítógépek a Neumann-elveknek megfelelően bináris kódolást használnak. Ezt a legkönnyebb megvalósítani elektronikai szempontból. A hexadecimális számrendszer könnyen átalakítható kettessé és viszont, és ebben felírva a számok sokkal rövidebbek. 1
0
1
1
0
1
0
0
Egy bináris helyiérték egy bit információ tárolására, egy nyolc helyiértékes bináris szám 1 byte információ tárolására alkalmas. Az egyes helyiértékek elnevezése jobbról balra így: 0.bit, 1.bit, 2.bit, stb...
Átváltások Példaként váltsuk át a fenti bináris számot tizes számrendszerbe! 10110100 =0*20+0*21+1*22+0*23+1*24+1*25+0*26+1*27=180
Nem kell mást tenni, mint a helyiértéknek megfelelő 2-es hatványt összeszorozni az ott talált számmal. Egyszerűbben felírva: 10110100 =128+32+16+4=180 (ha nem jelöljük, akkor 10-es számrendszer!)
Most nézzük az átváltást tizes-ől kettes számrendszerbe! A módszer nagyon egyszerű, a számot kettővel kell osztani, a maradékot oldalra írni, a hányadossal tovább folytatni az osztást egészen addig. amíg a hányados 0 nem lesz (Euklideszi algoritmus). Nézzük a példát! 180 0 180 osztva kettővel 90, maradék 0 90 0
90 osztva kettővel 45, maradék 0
45 1
45 osztva kettővel 22, maradék 1
22 0
22 osztva kettővel 11, maradék 0
11 1
11 osztva kettővel 5, maradék 1
5 1
5 osztva kettővel 2, maradék 1
2 0
2 osztva kettővel 1, maradék 0
1 1
1 osztva kettővel 0, maradék 1
0
A maradékokat kell leírni alulról fölfelé: 180=10110100
Törtszámok ábrázolása A "kettedes" törtek ábrázolása tulajdonképpen következik az eddigiekből. A "kettedes" vessző utáni helyiértékek 2 negatív egészkitevős hatványai.
0,
2-1
2-2
2-3
2-4
2-5
2-6
2-7
0
1
1
0
1
0
1
Nézzük az átváltást: 0,0110101 =0•2-1+1•2-2+1•2-3+0•2-4+1•2-5+0•2-6+1•2-7=0,4140625
Egyszerűbben felírva: 0,0110101 =0,25+0,125+0,03125+0,0078125=0,4140625
Tizedes tört átváltásakor az egész részt a fentebb tanultak szerint kell átváltani binárisba. A törtrész különválasztva a következő szabály szerint váltjuk át: A számot szorozzuk kettővel, az egész részét írjuk ki, a törtrészével folytassuk a műveletet addig, amíg a törtrész nulla nem lesz, vagy meg nem unjuk a dolgot. (Azaz el nem értük a kellő számú "kettedes"-jegyet.) Nézzük a példát! 0,4140625 0,828125 0 1,65625 1 1,3125 1 0,625 0 1,25 1 0,5 0 1 1
0,4140625 szorozva kettővel 0,828125, egészrésze 0 0,828125 szorozva kettővel 1,65625, egészrésze 1 0,65625 szorozva kettővel 1,3125, egészrésze 1 0,3125 szorozva kettővel 0,625, egészrésze 0 0,625 szorozva kettővel 1,25, egészrésze 1 0,25 szorozva kettővel 0,5, egészrésze 0 0,5 szorozva kettővel 1, egészrésze 1
0 Az egész részeket felülről lefelé haladva kell a "kettedes" vessző után írni:
Összeadás +
0
1
0
1
0
0
1
0
0
0
1
1
0’
1
0
1
1 + 1 1
Szorzás
0
0 0 0
0 0 1
1 1 1
1 1 0
1
0
1
0
0
0
1
0
1
1
0
1
1
1
1
0 1 1
+
1
0
1
1
0
Negatív számok ábrázolása A számítógép előjeles számok ábrázolására az un. kettes komplemens képzést használja. Az előjel a legelső biten jelenik meg, ez "elveszik " a számábrázolás számára. 0 a pozitív, 1 a negatív előjel bit. Legegyszerűbb lenne, ha a pozitív megfelelőben az előjelet kicserélve képeznénk a negatív számot. Ez a módszer azonban nem jó. Helyette használatos a fentebb említett kettes komplemens. A kettes komplemens működéséhez nézzük meg "ugyanezt" tizesben először.
Tegyük fel hogy csak egy számjegyet használunk. +9 8
-3 5
+1
8 +7 15 X
Majdnem ugyanaz az eredmény a második esetben is, de nem kell tudni kivonni hozzá. Persze kérdés, hogy a 15-ben az egyessel mi lesz. Azt mondjuk túlcsordult. Az ötlet tehát az, hogy a negatív számhoz adjuk hozzá a legnagyobb ábrázolható számot (9) és még egyet (9+1=10). Ez a szám a jótékony túlcsordulás miatt pont úgy viselkedik, mint a negatív szám. Sajnos a kettes komplemensben adódnak még némi problémák, de az elv ugyanaz. Nézzük hogyan kell kettes komplemensben ábrázolni a számokat!
Példáinkban nyolc bitet használunk, azaz az első bit az előjel és 7 bit marad a számábrázolásra. Ilyen módon a legnagyobb pozitív szám 127, a nullánál nagyobb számoknál csak annyi a feladat, hogy eléírjuk a 0 előjel bitet.
A negatív számok felírása kicsit bonyolultabb. Három módszert is mutatunk. Próbáljuk ki őket a -115-el.
Pl.: 115=01110011
I. Módszer (Ez nem más, mint amit a tizes számrendszerben csináltunk.)
A legnagyobb ábrázolható pozitív szám a 127, ezt plusz 1-et adjuk hozzá -115-höz. Az eredmény 13. Ez binárisban: 0001101, eléírva az 1-es előjel bitet.
-115=10001101
II. Módszer 1. Először írjuk fel a szám abszolút értékét binárisban!.
01110011 2. Váltsuk át az összes bitet ellenkezőjére, azaz az egyeseket nullára, a nullákat egyesre'
10001100 3. Adjunk hozzá egyet a számhoz!
10001101
III. Módszer 1. Először írjuk fel a szám abszolút értékét binárisban!.
01110011 2. Jobbról indulva az első 1-ig (az 1 is) hagyjuk változatlanul, a többit pedig váltsuk ellenkezőjére.!
10001101 Mindhárom módszer ugyanazt az eredményt adja. Próbáljuk ki, hogy ez a szám valóban úgy viselkedik, mintha negatív lenne. (Például adjuk hozzá a 115-höz. Az eredmény nulla lesz.)
kettes komplemens alakítása tízes számrendszerbe Ha az előjel bitje nulla, tehát a szám pozitív a már ismert módszert alkalmazhatjuk a maradék hét bitre. Ha azonban az előjel bit 1, vagyis a szám negatív az átváltás nem ennyire egyszerű. Tulajdonképpen a fenti három módszer visszafelé eljátszásával próbálkozhatunk, pl.:
1. Válasszuk le az előjel bitet és vonjunk ki a számból egyet. 2. Vonjuk ki a kapott számot 127-ből, így megkapjuk a negatív számunk abszolút értékét.
Tizenhatos számrendszer • A számítógép kettes számrendszerben számol, azonban azt észrevehettük, hogy így leírni a számokat csak igen sok számjegy segítségével lehet. A rövidebb felírás kedvéért egy nagyobb alapú számrendszerre volt szükség. Láttuk azonban, hogy a kettesből tizesbe való átváltás nem túl gyors. Ezek az érvek (rövidség, gyors átváltás) a hexadecimális számrendszer mellett szólnak. • Ebben a felírásban 16 féle számjegyre lesz szükségünk.: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Az utóbbi 6 rendre A=10, B=11, C=12, D=13, E=14, F=15. A helyiértékek pedig: 163 162 161 160 A B 8 FH (4096) (256) (16) (1)
Átváltások Tizenhatosból tízesbe hasonlóan kell, mint a kettesből tízesbe. A megfelelő helyiértéket meg kell szorozni az ott talált számjegy értékével. Példaként váltsuk át a fenti számot:
AB8FH=10•4096+11•256+8•16+15•1= =40960+2816+128+15=43919
Átváltások Tizesből tizenhatosba is hasonlóan fogunk eljárni, mint a binárisban, de itt nem kettővel kell osztani, hanem tizenhattal. Nézzük a példát! 43919 15 2744 8 171 11 10 10 0
43919 osztva tizenhattal 2744, maradék 15 (F) 2744 osztva tizenhattal 171, maradék 8 171 osztva tizenhattal 10, maradék 11 (B) 10 osztva tizenhattal 0, maradék 10 (A)
AB8FH
Átváltások Nézzünk példát tizenhatosból kettesbe! Ez azért egyszerű, mert egy hexadecimális számjegy pontosan négy bináris számjegynek felel meg. Átváltáskor tehát csak arra kell vigyázni hogy akkor is négy bináris számjegyet írjunk le ha kevesebbel is le tudnánk az adott számot.
A 1010
B 1011
8 1000
AB8FH=1010101110001111
FH 1111
Átváltások Kettesből tizenhatosba: Osszuk fel a kettes számrendszerbeli szám számjegyeit hátulról kezdve négyes csoportokba (az nem baj ha utoljára kevesebb marad), majd ezeket a négyes csoportokat váltsuk át tizenhatosba, végül a kapott számjegyeket írjuk egymás mellé!
1010101110001111 = =1010 1011 1000 1111 =A B 8 FH