a számrendszerekrszucs/progalap/... · a számrendszerekr l általában 3 Érdekes kérdés, hogy...
TRANSCRIPT
A számrendszerekről általában
Készítette: Dávid András
A számrendszerekről általában
2
Miért foglalkozunk vele? (Emlékeztető)A mai számítógépek többsége Neumann-elvű.Neumann János a következő elveket fektette le:
1. A számítógép legyen univerzális (több célra felhasználható – programvezérelt)! 2. A programot az adatokhoz hasonlóan tároljuk a gépben! Adat és program memória
szükségessége, 3. A gép működésének alapja a bináris (kettes) számrendszer legyen. Egyszerűbb
áramköri megvalósítás, két állapot.
Az előadás témája Előadásunk témája a Neumann-elv 3. pontja értelmében a számrendszerek és a számrendszerek közötti átváltások, valamint az egész és a valós számok ábrázolása. Későbbi tanulmányaink során (pl. digitális technika, programozás) találkozni fogunk a számrendszerekről tanultakkal.
Alapismeretek Eddigi matematikai tanulmányaink során két fogalommal már találkoztunk. Ez az alaki- és a helyi érték.
1. Az alaki érték: Az információt a számjegy alakja hordozza. Pl. az 5 jelenthet 5 db labdát, 5 db számítógépet, stb.
2. A helyi érték: Az információt a számjegy adott számban elfoglalt helye hordozza. Pl. 10-es számrendszerben a 123-ban az 1-es számjegy a százas helyi értéken, a 2-es a tízes helyi értéken, a 3-as az egyes helyi értéken szerepel. Maga a szám: 1*100+2*10+3*1=123.
A számítástechnikában a 2-es, a 8-as és a 16-os számrendszer használatos. A 2-es számrendszerben a számjegyeket szokás bit-nek, 8 bit-ből álló számot bájtnak nevezni. A biteket jobbról 0-val kezdve indexeljük.
1 bájt
helyi értékek
bitek sorszáma017 23456
202127 2223242526
1 bit
a legnagyobb a legkisebbhelyi értékű bit
A számrendszerekről általában
3
Érdekes kérdés, hogy az egyes számrendszerekben hány db számjegyünk van, és melyek ezek. A tízes számrendszerben tudjuk, hogy 10 db számjegy van (0-9). A kettes számrendszerben 2 db számjegy létezik, ez a 0 és az 1. A nyolcasban 8 db, (0-7), a tizenhatosban 16 db, (0-9 és A-F). Minden helyi értéken csak egy db számjegy lehet, ezért a 9 utáni számjegyeket az angol ábécé nagybetűivel jelöljük. A 10-nek az A, a 11-nek a B, … a 15-nek az F felel meg. Következésképpen egy adott számrendszerben a számjegyek száma egyenlő a számrendszer alapjával, a számjegyek pedig 0-tól számrendszer alapja-1-ig terjednek.
Számrendszerek közötti átváltások, konverziók
1. Tízes számrendszer ⇒⇒⇒⇒ más számrendszer Mi a tízes számrendszerben nőttünk fel, így első lépésként vizsgáljuk meg, hogyan tudunk tízes számrendszerben felírt számot átváltani más számrendszerbe. Két módszert említünk meg.
1. 1. Osztásos módszer. Az átváltandó számot osztjuk az új számrendszer alapjával, a maradékot feljegyezzük (ez lesz az új számrendszerbeli szám egy számjegye). A hányadost ismét osztjuk az új számrendszer alapjával, a maradékot feljegyezzük. Ezt a műveletet ismételten addig végezzük, amíg 0-át nem kapunk hányadosként. A maradékokat visszafelé olvasva megkapjuk az átváltandó szám új számrendszerbeli alakját. Példaként írjuk fel az 553, mint 10-es számrendszerben felírt szám 2-es, 8-as, 16-os számrendszerbeli alakját!
a) Tízes számrendszer ⇒ kettes számrendszer konverzió (ismételten osztunk 2-vel) 553 1276 0138 069 134 017 18 04 02 01 10
Az eredmény: 55310=10001010012
A számrendszerekről általában
4
b) Tízes számrendszer ⇒ nyolcas számrendszer konverzió (ismételten osztunk 8-al) 553 1
69 58 01 10
Az eredmény: 55310=10518
c) Tízes számrendszer ⇒ tizenhatos számrendszer konverzió (ismételten osztunk 16-al)
553 934 22 20
Az eredmény: 55310=22916
1. 2. Helyi értékes módszer. Írjuk fel az új számrendszer helyi értékeit. Az átváltandó számban keressük meg az új számrendszer legnagyobb helyi értékét, amellyel osztható az átváltandó szám. Osszuk el a számot a megtalált legnagyobb helyi értékkel, a hányadost írjuk be a megfelelő helyi értékre. Az átváltandó számot csökkentsük a hányados*helyi érték értékével. Az eredményre alkalmazzuk a módszert mindaddig, amíg 0-t nem kapunk eredményül. Példaként írjuk fel az 553, mint tízes számrendszerbeli szám nyolcas számrendszerbeli alakját! A nyolcas számrendszer helyi értékei 80=1; 81=8; 82=64; 83=512; stb.
80818283
Az 553-ban az 512 mint legnagyobb helyi érték megtalálható, így az 553:512 osztás hányadosát (1) beírjuk az 512-es helyi értékre.
80818283
1
Az átváltandó számot csökkentjük 1*512-vel. Így 41-et kapunk. A 41-ben 8 mint legnagyobb helyi érték megtalálható, így a 41:8 osztás hányadosát (5) beírjuk a 8-as helyi értékre.
80818283
1 5
A számrendszerekről általában
5
Az átváltandó számot csökkentjük 5*8-al. Így 1-et kapunk. Az 1-ben 1 mint legnagyobb helyi érték megtalálható, így az 1:1 osztás hányadosát (1) beírjuk az 1-es helyi értékre.
80818283
1 5 1 Az 1-et csökkentjük 1-el. 0-át kapunk, így végeztünk az átváltással. A nem kitöltött helyi értékekhez értelemszerűen 0-át írunk. Az eredmény: 55310=10518
A helyi értékes módszer gyorsabb, a gyakorlatban mégis az első (osztásos) módszert alkalmazzák gyakrabban, mivel könnyű rá számítógépes algoritmust írni. A gyakorlaton ezt mi is meg fogjuk tenni.
2. Bármely számrendszer ⇒⇒⇒⇒ tízes számrendszer
2. 1. Helyi érték*alaki érték módszere Az átváltás lényege, hogy az átváltandó szám számrendszerében a megfelelő alaki értékek és helyi értékek szorzatát összegezzük. Példaként ellenőrizzük az 1-es pontban végzett konverzióink helyességét! Írjuk fel az 10001010012 szám tízes számrendszerbeli megfelelőjét!
helyi értékek202127 222324252629 28
100 010101 0
1*29 + 0*28 + 0*27 + 0*26 + 1*25 + 0*24 + 1*23 + 0*22 + 0*21 +1*20 = 553 Az eredmény: 10001010012 = 55310 Írjuk fel az 10518 szám tízes számrendszerbeli megfelelőjét!
80818283
1 5 10
1*83 + 0*82 + 5*81 + 1*80 = 553 Az eredmény: 10518 = 55310 Írjuk fel a 22916 szám tízes számrendszerbeli megfelelőjét!
2 92160161162
2*162 + 2*161 + 9*160 = 553 Az eredmény: 22916 = 55310
A számrendszerekről általában
6
2. 2. Horner séma A konverzió során kiindulunk az átváltandó szám legbaloldalibb (legnagyobb helyi értékű)számjegyéből. Megszorozzuk az átváltandó szám számrendszerének alapjával, majd hozzáadjuk a következő számjegyet. Ezt a módszert addig ismételjük, amíg „el nem fogy” az átváltandó szám. Írjuk fel az 10001010012 szám tízes számrendszerbeli megfelelőjét!
helyi értékek202127 222324252629 28
100 010101 0
((((((((1*2+0)*2+0)*2+0)*2+1)*2+0)*2+1)*2+0)*2+0)*2+1=553 Az eredmény: 10001010012 = 55310 Írjuk fel az 10518 szám tízes számrendszerbeli megfelelőjét!
80818283
1 5 10
((1*8+0)*8+5)*8+1=553 Az eredmény: 10518 = 55310 Írjuk fel a 22916 szám tízes számrendszerbeli megfelelőjét!
2 92160161162
(2*16+2)*16+9=553 Az eredmény: 22916 = 55310
A számrendszerekről általában
7
3. Kettes alapú számrendszerek közötti gyors konverziók A számítógépek kettes számrendszerbeli számokkal dolgoznak. Talán már − az eddigiek alapján − feltűnt, hogy a kettes számrendszerbeli számok hosszúak, terjedelmesek, nehéz őket leírni. Oldjuk meg, hogy tömörebben leírhatók legyenek ezek a számok! Erre olyan más számrendszerek kellenek melyek könnyen átválthatók kettes számrendszerbe. A számítástechnika területén a nyolcas és a tizenhatos számrendszer terjedt el. A gyors konverzió megértéséhez nézzük meg, hogy a 8-as illetve a 16-os számrendszer számjegyei milyen kettes számrendszerbeli számokkal írhatók le!
8-as számrendszerbeli
számjegy
2-es számrendszerbeli
megfelelő
16-os számrendszerbeli
számjegy
2-es számrendszerbeli
megfelelő0 000 0 0000 1 001 1 0001 2 010 2 0010 3 011 3 0011 4 100 4 0100 5 101 5 0101 6 110 6 0110 7 111 7 0111
8 1000 9 1001 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111
Megfigyelhetjük, hogy minden egyes 8-as számrendszerbeli számjegy felírható 3 bites 2-es számrendszerbeli számmal, illetve minden egyes 16-os számrendszerbeli számjegy felírható 4 bites 2-es számrendszerbeli számmal. Az átalakítás elve a csoportosítás.
3. 1. 2-es számrendszerbeli szám átalakítása 8-as, illetve 16-os számrendszerbe Az átalakítás során az átváltandó szám bitjeit a legkisebb helyi értéktől (jobbról) kezdve 3 bites (8-as számrendszerbe átalakítás), illetve 4 bites (16-os számrendszerbe való átalakítás) csoportokba foglaljuk. Az egyes csoportokat helyettesítjük az adott csoportnak megfelelő 8-as, illetve 16-os számrendszerbeli számjeggyel.
A számrendszerekről általában
8
Írjuk fel a 100110001012 számot 8-as illetve 16-os számrendszerben!
503101 10010 0 01
2
hármascsoportok
a hármascsoportoknakmegfelelő 8-as
számrendszerbeliszámjegyek
A megoldás: 100110001012 = 23058
5C101 10010 0 01
4
négyescsoportok
a négyescsoportoknak
megfelelő 16-osszámrendszerbeli
számjegyek A megoldás: 100110001012 = 4C516
3. 2. 8-as, illetve 16-os számrendszerbeli szám átalakítása 2-es számrendszerbe Az átalakítás során egyszerűen helyettesítjük a 8-as illetve a 16-os számrendszerbeli számjegyeket a neki megfelelő 3, illetve 4 bites kettes számrendszerbeli megfelelőjükkel. Írjuk fel 23058, illetve a 4C516 kettes számrendszerbeli megfelelőjét!
A megoldás: 23058 = 0100110001012 4C516 = 0100110001012
503000 101011
2010
8-asszámrendszerbeli
számjegyek
a megfelelő 2-esszámrendszerbeli
számok
5C1100 0101
16-osszámrendszerbeli
számjegyek
a megfelelő 2-esszámrendszerbeli
számok
40100
A számrendszerekről általában
9
Gyakorló feladatok Végezze el az alábbi konverziókat!
10-es 2-es 8-as 16-os számrendszer
255 1024 1526 2056
65535 11000110111 1101100011
1256 365
12AC A2F
32000 1100111000111
ACF1 5270
11001101 12530
ADC 410
4500 110010000
1ACF 367
101100001111 A210
12650
A számrendszerekről általában
10
Műveletek tízestől eltérő számrendszerbeli számokkal Ebben a részben elsősorban a kettes és a tizenhatos számrendszerbeli számok közötti műveleteket vizsgáljuk meg, de az elmondottak érvényesek bármely alapú számrendszerre. Foglalkozzunk egyelőre a pozitív számokkal!
1. Összeadás Példaként végezzük el a 123+59 műveletet kettes, nyolcas és tizenhatos számrendszerben!
27 26 25 24 23 22 21 20103 102 101 100 83 82 81 80 163 162 161 160
1 2 35 9
1 8 2
111111 010 111 1
01101101
31 737662
B7B36B
+ + + += = = =
2. Kivonás Példaként végezzük el a 123-59 műveletet kettes, nyolcas és tizenhatos számrendszerben!
27 26 25 24 23 22 21 20103 102 101 100 83 82 81 80 163 162 161 160
1 2 35 9
0 6 4
111111 010 111 1
0000001
31 737001
B7B304
- - - -= = = =
3. Szorzás, osztás A szorzás és az osztás műveletére bonyolultsága miatt nem térünk ki.
A műveletek egyszerűsítése A Neumann-elvű számítógépek kettes számrendszerben dolgoznak. A számítógép aritmetikai egységének fejlesztői törekedtek arra, hogy minél olcsóbb áramköri egységeket hozzanak létre. Ezért pl. sok processzor − az első processzorok, kivéve a matematikai társprocesszorokat − csak összeadni tud. Hogyan tudjuk akkor végrehajtani a kivonást, szorzást, és a többi műveletet? A megoldás az, hogy minden műveletet visszavezetünk összeadásra. A kivonás nem más, mint a kisebbítendő és a kivonandó ellentettjének az összege. A fenti példa esetén a 123-59 művelet helyettesíthető a 123+(-59) művelettel. A megoldandó probléma a -59 felírása kettes, nyolcas, tizenhatos számrendszerben. A szorzás visszavezethető sorozatos összeadásra (pl. 3*59=59+59+59), az osztás pedig sorozatos kivonásra.
A számrendszerekről általában
11
Számok ábrázolása A továbbiakban csak kettes számrendszerben felírt számokkal foglalkozunk. A számítógépek processzorának regiszterei illetve az operatív memória egységei csak fix hosszúságú számokat képesek tárolni, illetve a processzor műveletvégző egységei csak fix hosszúságú számokkal képesek dolgozni. Pl. 8 bit = 1 bájt, 16 bit = 2 bájt. Az egyszerűség kedvéért a továbbiakban 1 bájtos adatokkal dolgozunk. A pozitív számokat egyszerű kettes számrendszerbeli számként tároljuk. A kérdés, hogy a negatív számokat hogyan ábrázoljuk. Az egyik megoldás lehet − a leggyakrabban ezt alkalmazzák −, hogy az előjel számára kijelölnek egy bitet.
legkisebbhelyiértékű bit
előjelbit
20212223242526
Az előjelbit nem rendelkezik helyi érték információval, feladata csupán az ábrázolt szám előjelének tárolása. Megállapodás szerint, ha az előjelbit 0, akkor az ábrázolt szám pozitív, ha 1, akkor negatív. A szám abszolút értékét ezek után ábrázolhatnánk egyszerű kettes számrendszerbeli számként, de a legtöbbször mégsem ezt tesszük. Mint említettük minden műveletet igyekeznek összeadásra visszavezetni. Hogy ez minél egyszerűbben megtehetőlegyen a negatív számokat ún. kettes komplemens kódban ábrázolják. A kettes komplemens kód nem más, mint az additív inverz. Ha egy számhoz hozzáadjuk a kettes komplemensét − additív inverzét −, akkor 0-át kapunk eredményül. Egy kettes számrendszerbeli szám kettes komplemens kódját az alábbi két módszer valamelyikével képezhetjük:
a) A legjobboldalibb (legkisebb helyi értékű) bittől indulva minden bitet ellenkezőjére (0 helyett 1-et, 1 helyett 0-át írva) változtatunk (egyes komplemens), majd a legkisebb helyi értékű bithez hozzáadunk 1-et.
b) A legjobboldalibb (legkisebb helyi értékű) bittől indulva az első 1-ig minden bitet változatlanul leírunk (beleértve magát az első 1-est is), majd a többi bitet ellenkezőjére változtatjuk.
Példaként végezzük el a 123-59 műveletet, úgy, hogy összeadást végzünk. A megoldás értelmében a 123+(-59) műveletet fogjuk elvégezni. A -59-et az 59-es szám kettes komplemens kódjával fogjuk ábrázolni. (A negatív számokat mindig kettes komplemens kódban ábrázoljuk!)
A számrendszerekről általában
12
0000001=
111111 010 111 1-
026 25 24 23 22 21 20
előjelbit helyiértékek103 102 101 100
1 2 35 9-
111111 001 100 0+
026 25 24 23 22 21 20
előjelbit helyiértékek
110
0
az 59 ketteskomplemens
kódja
negatív szám: -59 További kérdés, hogy egy negatív szám abszolút értékét hogyan tudjuk meghatározni. A negatív számokat kettes komplemens kódban tároljuk, így az abszolút értéküket a kettes komplemens képzés szabályának újabb alkalmazásával tudjuk meghatározni.
Ábrázolási tartomány A számítástechnikában, programozási gyakorlatban előjeles és előjel nélküli számokkal dolgozunk. Mekkora a legkisebb és a legnagyobb ábrázolható szám? A válasz természetesen függ attól, hogy hány biten tároljuk az adatokat. Néhány példa: Előjel nélküli 1 bájtos adat. 8 bit áll rendelkezésünkre, 8 biten 28 azaz 256 különbözőszámot ábrázolhatunk. A legkisebb szám a 0 (minden bit 0), a legnagyobb szám a 28-1, vagyis 255 (minden bit 1). Előjel nélküli 2 bájtos adat. 16 bit áll rendelkezésünkre, 16 biten 216 azaz 65536 különbözőszámot ábrázolhatunk. A legkisebb szám a 0 (minden bit 0), a legnagyobb szám a 216-1, vagyis 65535 (minden bit 1). Előjeles 1 bájtos adat. A legbaloldalibb bit (7. bit) előjelbit, így adattárolásra 7 bit áll rendelkezésünkre. A legkisebb szám a -27, azaz -128 (10000000), a legnagyobb szám a 27-1, vagyis 127 (01111111). A 0 alakja 00000000, a -1-nek a 11111111 felel meg. Előjeles 2 bájtos adat. A legbaloldalibb bit (15. bit) előjelbit, így adattárolásra 15 bit áll rendelkezésünkre. A legkisebb szám a -215, azaz -32768 (1000000000000000), a legnagyobb szám a 215-1, vagyis 32767 (0111111111111111).
A számrendszerekről általában
13
Gyakorló feladatok Végezze el az alábbi műveleteket!
10-es 2-es 8-as 16-os Számrendszer
1254+657 1100110+11011
567+217 AC4+B1
1254-657 1100110-11011
567-217 AC4-B1
110011+1100 12569+3562
621+54 C45+4F
110011-1100 12569-3562
621-54 C45-4F
2744+256 1298+458
11001111100+1101 A21+FF
2744+256 1298+458
11001111100+1101 A21+FF
A számrendszerekről általában
14
Néhány érdekes feladat Végezzük el a 139+153 műveletet kettes számrendszerben 1 bájtos előjel nélküli adatokkal! Mit tapasztalunk?
27 26 25 24 23 22 21 20
111000 000 110 1
00100100
11 0
1
139153292
Kikötöttük, hogy az adataink 1 bájtosak. Megfigyelhetjük, hogy a 7. bitek összeadásakor keletkezik átvitel. Mi történik az átvitellel? Ebben az esetben elveszik. Azt mondhatjuk, hogy az eredmény túlcsordult. Az eredmény 36. Rossz eredményt kaptunk, aminek az oka, hogy az összeg nem fér el 1 bájton. Erre valahogy figyelmeztetni kell a programozót! Erre és más események jelzésére szolgálnak a processzorban levő „flag regiszter” különböző bitjei (jelen esetben a „túlcsordulás bit”). Végezzük el a 120+53 műveletet kettes számrendszerben 1 bájtos előjeles adatokkal! Mit tapasztalunk?
1011010
001111 001 111 0
026 25 24 23 22 21 20előjelbit
001
120 53173
Az eredmény -83. Két pozitív számot adunk össze (az előjelbit 0), az eredmény negatív (az összeg előjelbitje 1). Hogy lehetséges ez? Ha megfigyeljük, akkor a 6. bitek összeadásakor átvitel keletkezik. Ez az átvitel „elrontja” az előjelbitet. Az előbb említett flag regiszter tartalmaz egy előjeljelző bitet is, melyet a programozó lekérdezve megkapja az eredmény előjelét. Hasonló hiba előfordulhat oly módon, hogy két negatív szám összegére pozitív eredményt kapunk. Tanulságként megfogalmazható, hogy figyelnünk kell az ábrázolási tartományra. Mindkét példa esetén a hibát az okozta, hogy az eredmény nem fért el a rendelkezésre álló helyen.
A számrendszerekről általában
15
Egy kis digitális technika Hogyan működik a 3 bites összeadó?
B A Ci-1 ∑ Ci 0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1
A számábrázolásról
Egész típus
17
Egész típus
Az egész típus bemutatása A programozási gyakorlat egyik gyakran használt elemi adattípusa az egész típus, melyet leggyakrabban 2 bájton ábrázolnak kettes komplemens kódban.
Az egész típus jellemzőiÉrtékhalmaz: -215 … +215-1. Általánosan: Min’Egész … Max’Egész. Műveletek: +, -, *, Div (egészosztás/hányadosképzés), Mod (maradékképzés), ^ (pozitív egész kitevős hatványozás), ~ unáris mínusz. Relációk: =, ≠, <, ≤, >, ≥.Ábrázolás: 2 bájtos, kettes komplemens kód.
Az egész számokat kettes számrendszerben valahány bites (bájtos) kettes komplemens kóddal ábrázoljuk. A feladatok során az egész számokat 2 bájton tároljuk.
Az egész típus ábrázolása
Az ábrázolás lépései:1. lépés: Az ábrázolandó szám abszolút értékét átváltjuk kettes számrendszerbe, és ha szükséges kiegészítjük 16 bit hosszúságúra.
2. lépés: Az ábrázolás során a legbaloldalibb bitet előjelbitként kezeljük. Az előjelbit 0, ha a szám pozitív, 1, ha negatív. Az ábrázolás módja:
• A pozitív számokat szokásos bináris számként tároljuk. • A negatív számokat – hogy a lehető legegyszerűbb legyen velük a műveletvégzés –
kettes komplemens kódban (additív inverz) ábrázoljuk. Az additív inverz jelentősége, hogy ha az eredeti számhoz hozzáadjuk a kettes komplemens kódját – elfeledkezve az előjelbit különleges jelentéséről – akkor 0-át (azaz csupa 0 bitből álló számot) kapunk.
Egész típus
18
Egy bináris szám kettes komplemens kódját az alábbi két módszer valamelyikével képezhetjük:
a) A legjobboldalibb (legkisebb helyi értékű) bittől indulva minden bitet ellenkezőjére (0 helyett 1-et, 1 helyett 0-át írva) változtatunk (egyes komplemens), majd a legkisebb helyi értékű bithez hozzáadunk 1-et.
b) A legjobboldalibb (legkisebb helyi értékű) bittől indulva az első 1-ig minden bitet változatlanul leírunk (beleértve magát az első 1-est is), majd a többi bitet ellenkezőjére változtatjuk.
3. lépés: A logikai sorrendhez képest (magas-, alacsony helyi értékű bájt) a memóriában való ábrázoláskor bájtcsere történik. Az alábbi ábra a logikai sorrendet mutatja:
legkisebb helyiértékű bit
előjelbit
2021272829
alacsonyabb helyi értékű bájtmagasabb helyi értékű bájt A memóriában fizikailag a magasabb és az alacsonyabb helyi értékű bájt helyet cserél.
alacsonyabb helyi értékű bájt magasabb helyi értékű bájt
További jellemzőkAz egész típus alapvetően megegyezik a matematikában használt egész számokkal, gyakorlatilag azonban a számítógép véges számábrázolása miatt az egész számkörnek csak egy véges tartományát tartalmazza. Emiatt az egész számok köre az elemi aritmetikai műveletekre (+,-,*) nem zárt, így aritmetikai műveletek közben egész túlcsordulás fordulhat elő. A zártság hiánya miatt a számítógépes egész számok műveleteire nem mindig teljesül az asszociativitás és a disztributivitás. Az egész számoknak a programozásban sokféle változata létezik. Ezek egymástól a Min’Egész és a Max’Egész értékben, illetve előjeles, nem előjeles tulajdonságban különböznek. Hosszú egész: Min’Egész=-231, Max’Egész=231-1, előjeles Bájt: Min’Egész=0, Max’Egész=28-1, előjel nélküli Szó: Min’Egész=0, Max’Egész=216-1, előjel nélküli
Egész típus
19
Egész számok ábrázolása
Mintafeladatok
1. Feladat Egy példán keresztül ismertesd az egész számok ábrázolásáról tanultakat!
Az egész számokat kettes számrendszerben valahány bites (bájtos) kettes komplemens kóddal ábrázoljuk. A feladatok során az egész számokat 2 bájton tároljuk.
Az ábrázolás lépései:1. lépés: Az ábrázolandó szám abszolút értékét átváltjuk kettes számrendszerbe, és ha szükséges kiegészítjük 16 bit hosszúságúra.
2. lépés: Az ábrázolás során a legbaloldalibb bitet előjelbitként kezeljük. Az előjelbit 0, ha a szám pozitív, 1, ha negatív. Az ábrázolás módja:
• A pozitív számokat szokásos bináris számként tároljuk. • A negatív számokat – hogy a lehető legegyszerűbb legyen velük a műveletvégzés –
kettes komplemens kódban (additív inverz) ábrázoljuk. Az additív inverz jelentősége, hogy ha az eredeti számhoz hozzáadjuk a kettes komplemens kódját – elfeledkezve az előjelbit különleges jelentéséről – akkor 0-át (azaz csupa 0 bitből álló számot) kapunk.
Egy bináris szám kettes komplemens kódját az alábbi két módszer valamelyikével képezhetjük:
a) A legjobboldalibb (legkisebb helyi értékű) bittől indulva minden bitet ellenkezőjére (0 helyett 1-et, 1 helyett 0-át írva) változtatunk (egyes komplemens), majd a legkisebb helyi értékű bithez hozzáadunk 1-et.
b) A legjobboldalibb (legkisebb helyi értékű) bittől indulva az első 1-ig minden bitet változatlanul leírunk (beleértve magát az első 1-est is), majd a többi bitet ellenkezőjére változtatjuk.
3. lépés: A logikai sorrendhez képest (magas-, alacsony helyi értékű bájt) a memóriában való ábrázoláskor bájtcsere történik.
Egész típus
20
Az alábbi ábra a logikai sorrendet mutatja: legkisebb helyi
értékű bitelőjelbit
2021272829
alacsonyabb helyi értékű bájtmagasabb helyi értékű bájt A memóriában fizikailag a magasabb és az alacsonyabb helyi értékű bájt helyet cserél.
alacsonyabb helyi értékű bájt magasabb helyi értékű bájt
Példaként határozzuk meg a -553 egészszám memóriabeli alakját!
Megoldás:1. lépés: A szám abszolút értékét átváltjuk kettes számrendszerbe (osztunk kettővel – közben a maradékot feljegyezzük – amíg 0-át nem kapunk hányadosként), és ha szükséges a kapott bináris számot kiegészítjük 16 bit hosszúságúra.
553 1276 0138 069 134 017 18 04 02 01 10
A szám abszolút értéke kiegészítve 16 bitre: 1010010000001000
2. lépés: Mivel a szám negatív, így képezzük a kettes komplemens kódot.
1110101110111111
alacsonyabb helyi értékű bájtmagasabb helyi értékű bájt
Egész típus
21
3. lépés: A memóriabeli fizikai elhelyezkedésben a logikai alakhoz képest bájtcsere történik.
11101011
alacsonyabb helyi értékű bájt
10111111
magasabb helyi értékű bájt
2. Feladat Határozd meg a -1234 egészszám memóriabeli alakját! Megoldás:
1. lépés: A szám abszolút értékét átváltjuk kettes számrendszerbe és ha szükséges a kapott bináris számot kiegészítjük 16 bit hosszúságúra.
1234 0617 1308 0154 077 138 019 19 14 02 01 10
A szám abszolút értéke kiegészítve 16 bitre: 0100100000010011
2. lépés: Mivel a szám negatív, így képezzük a kettes komplemens kódot.
0111010011011111
alacsonyabb helyi értékű bájtmagasabb helyi értékű bájt 3. lépés: A memóriabeli fizikai elhelyezkedésben a logikai alakhoz képest bájtcsere történik.
01110100
alacsonyabb helyi értékű bájt
11011111
magasabb helyi értékű bájt
Egész típus
22
3. Feladat Határozd meg az alábbi egész szám értékét az ábrán látható memóriabeli alakjából!
0110110111011001
Megoldás:
1. lépés: A memóriabeli alakhoz képest bájtcserét kell alkalmazni a logikai sorrend előállításához.
01101101
alacsonyabb helyi értékű bájt
11011001
magasabb helyi értékű bájt 2. lépés: Mivel a legbaloldalibb bit 1-es, így negatív számról van szó. A szám abszolút értékének megállapításához alkalmaznunk kell a kettes komplemens képzés szabályát. A fenti alak kettes komplemens kódja:
1010011010010010
3. lépés: Előállítjuk a szám abszolút értékét decimális számrendszerben.
=Z 20+22+25+26+28+211+214 = 1+4+32+64+256+2048+16384=18789
4. lépés: Az ábrázolt szám: -18789
4. Feladat Mely egész szám memóriabeli alakja a következő?
11001110 11011001
Megoldás:
1. lépés: A memóriabeli alakhoz képest bájtcserét kell alkalmazni a logikai sorrend előállításához.
magasabb helyi értékű bájt alacsonyabb helyi értékű bájt
1100111011011001
Egész típus
23
2. lépés: Mivel a legbaloldalibb bit 1-es, így negatív számról van szó. A szám abszolút értékének megállapításához alkalmaznunk kell a kettes komplemens képzés szabályát. A fenti alak kettes komplemens kódja:
1011000100100110
3. lépés: Előállítjuk a szám abszolút értékét decimális számrendszerben.
=Z 20+22+23+27+210+213+214 = 1+4+8+128+1024+8192+16384 = 25741
4. lépés: Az ábrázolt szám: -25741
5. Feladat Határozd meg a -31958 egészszám memóriabeli alakját, majd ellenőrizd az ábrázolás helyességét! Megoldás:
1. lépés: A szám abszolút értékét átváltjuk kettes számrendszerbe és ha szükséges a kapott bináris számot kiegészítjük 16 bit hosszúságúra.
31958 015979 17989 13994 01997 1998 0499 1249 1124 062 031 115 17 13 11 10
A szám abszolút értéke kiegészítve 16 bitre: 0101100111110011
Egész típus
24
2. lépés: Képezzük a 2-es komplemens kódot, mivel az ábrázolandó szám negatív.
magasabb helyi értékű bájt alacsonyabb helyi értékű bájt
0101010011000001
3. lépés: A memóriabeli fizikai elhelyezkedésben a logikai alakhoz képest bájtcsere történik. Az adott szám memóriabeli alakja a következő:
magasabb helyi értékű bájt
11000001
alacsonyabb helyi értékű bájt
01010100
Ellenőrizzük a megoldásunk helyességét! 1. lépés: A memóriabeli alakhoz képest bájtcserét kell alkalmazni a logikai sorrend előállításához.
magasabb helyi értékű bájt alacsonyabb helyi értékű bájt
0101010011000001
2. lépés: Mivel a legbaloldalibb bit 1-es, így negatív számról van szó. A szám abszolút értékének megállapításához alkalmaznunk kell a kettes komplemens képzés szabályát. A fenti alak kettes komplemens kódja:
0110101100111110
3. lépés: Előállítjuk a szám abszolút értékét decimális számrendszerben.
=Z 21+22+24+26+27+210+211+212+213+214 = 2+4+16+64+128+1024+2048+4096+ +8192+16384 = 31958 4. lépés: Az ábrázolt szám: -31958, vagyis a megoldásunk helyes.
Egész típus
25
Gyakorlófeladatok
1. Határozd meg az alábbi két bájtos egész számok memóriabeli alakját! 1236, -1236; 13210, -13210; 360, -360; 1005, -1005; 10050, -10050; Ellenőrizd a megoldásod!
2. Határozd meg a megfelelő egész számokat az alább látható memóriabeli alakjukból!
a) 1100011110101010
b) 01001011 01000101
c) 1001010101001010
d) 1001111010000111
e) 1111001011001001
3. Határozd meg a legkisebb két bájtos egész szám memóriabeli alakját! 4. Határozd meg a legnagyobb két bájtos egész szám memóriabeli alakját!
5. Ábrázold az alábbi számokat kettes számrendszerben 2 bájton! (A negatív számokat kettes komplemens kódban ábrázoljuk.)
(1255, -845); (22322, 15400); (-32000, -5400) a) Add össze a zárójelbe tett számokat a kettes számrendszerbeli ábrázolás szintjén! b) Ellenőrizd megoldásod helyességét! c) Írd le és indokold tapasztalataidat!
Valós típus
26
Valós típus A valós típus bemutatása A programozási gyakorlat egyik gyakran használt elemi adattípusa a valós típus, melyet leggyakrabban 6 bájton ábrázolnak ún. lebegőpontos, normalizált, eltolt nullapontú alakban.
A valós típus jellemzőiÉrtékhalmaz: nem definiálható a Min’Valós..Max’Valós tartomány, mivel nem igaz, hogy a valós számok értékhalmaza az e két érték közötti összes valós értéket tartalmazza. Műveletek: +, -, *, /, ^ (pozitív egész kitevős hatványozás), ~ unáris mínusz. Relációk: =, ≠, <, ≤, >, ≥.Ábrázolás: általában 6 bájton, ún. lebegőpontos, normalizált, eltolt nullapontú alakban.
A valós típus ábrázolása A valós számokat kettes számrendszerben, „lebegőpontos, normalizált, eltolt nullapontú” alakban ábrázoljuk. Egy valós számot X = m * 2k alakban írhatunk fel, ahol „m” a mantissza, „k” a karakterisztika. Ez még végtelen sok felírást jelenthet, így kikötjük, hogy a mantisszára teljesülnie kell az 12/1 <≤ m feltételnek (normalizált alak).
A mintafeladatok során a valós számokat 6 bájton − 5 bájton a mantisszát és 1 bájton a karakterisztikát − fogjuk ábrázolni. Az ábrázolás lépései:1. lépés: Az ábrázolandó valós szám abszolút értékét (külön az egészrészt és a törtrészt) átváltjuk kettes számrendszerbe. Ez lesz a mantissza abszolút értéke. 2. lépés: A mantissza abszolút értékét megszorozzuk egy alkalmas kettő hatvánnyal, hogy teljesítse az előírt feltételt ( 12/1 <≤ m ). Ezt hívjuk normalizálásnak. Az alkalmazott kettő-hatvány kitevőjének ellentettje lesz a karakterisztika értéke. A normalizálás következtében a mantissza 2-1 helyi értékű bitje mindig 1-es értékű, így ez a bit új információt nem hordoz. Emiatt nem is tároljuk, hanem ezt a bitet kijelöljük előjelbitnek (0, ha a szám pozitív, 1, ha negatív). Tároljuk tehát a mantissza abszolút értékét kettes számrendszerben a 2-1 helyi értékű bitet előjelbitként kezelve. Ezt az ábrázolási módot szokás „majdnem kettes komplemens kódú” ábrázolásnak is nevezni.
Valós típus
27
3. lépés: A karakterisztika is előjeles szám, így meg kell oldanunk a karakterisztika előjelének a tárolását. Lefoglalhatnánk egy bitet erre a célra, de ez az ábrázolható értékhalmaz felezését vonná maga után, így emiatt nem ezt a megoldást választjuk. A rendelkezésre álló memória terület felén negatív, felén pedig nem negatív értékeket ábrázolhatunk. A karakterisztikát az ábrázolható legkisebb karakterisztika abszolút értékével növeljük, majd egyszerűen átváltjuk kettes számrendszerbe. Ezt az ábrázolási módszert szokás „eltolt nullapontú ábrázolásnak” nevezni.
A mintafeladatok során a valós számot 6 bájtos valós típusú mennyiségként ábrázoljuk, ahol 5 bájton ábrázoljuk a mantisszát, 1 bájton a karakterisztikát, így az eltolt nullapontú ábrázolás azt fogja jelenteni, hogy a karakterisztikához 128-cat kell hozzáadni.
4. lépés: Logikailag először a mantissza bájtjai, helyi értékük szerint csökkenő sorrendben, majd a karakterisztika következnek. A fizikai (memóriabeli) sorrend a logikai sorrend megfelelőbájtjainak cseréjével alakul ki.
További jellemzőkA valós típus a matematikában használt valós számoknak megfelelő típus. A számítógépes számábrázolás véges volta miatt valós túlcsordulás léphet fel, a túlcsordulás miatt nem mindig teljesül az asszociativitás és a disztributivitás. További korlátozás, hogy ezek a számok csak a nevükben valósak, valójában racionális számok, méghozzá véges sok számjeggyel leírható tizedes illetve kettedes törtek. A műveletek elvégzése után az eredmény is csak adott pontossággal ábrázolható. Ha a műveletben szereplő két szám erősen eltérő nagyságrendű, akkor az eredmény kiszámítása közben alulcsordulás lép fel. Elképzelhető, hogy egy nagy számhoz hozzáadva egymás után több kisebb számot, az eredmény egyszer sem változik, a kis számok összeadása viszont már eredményezhet olyan nagyobb számot, amely az első helyen szereplő nagy számhoz hozzáadva már nem csordul alul. Ennek következménye, hogy az asszociativitás és a disztributivitás több esetben sérülhet, mint az egész számok körében. Valós számok decimális kiírásakor nem a pontos értéket látjuk, hanem egy kerekítettet. Ennek következménye, hogy a képernyőn látható A=B-ből nem következik, hogy A valóban egyenlő B-vel. Emiatt két valós szám egyenlőségét soha nem érdemes vizsgálni, csupán azt nézhetjük meg, hogy a különbségük elég kicsi-e.
Valós típus
28
Valós számok ábrázolása
Mintafeladatok
1. Feladat Egy példán keresztül ismertesd a valós számok ábrázolásáról tanultakat! A valós számokat kettes számrendszerben, „lebegőpontos, normalizált, eltolt nullapontú” alakban ábrázoljuk. Egy valós számot X = m * 2k alakban írhatunk fel, ahol „m” a mantissza, „k” a karakterisztika. Ez még végtelen sok felírást jelenthet, így kikötjük, hogy a mantisszára teljesülnie kell az 12/1 <≤ m feltételnek (normalizált alak).
A mintafeladatok során a valós számokat 6 bájton − 5 bájton a mantisszát és 1 bájton a karakterisztikát − fogjuk ábrázolni. Az ábrázolás lépései:1. lépés: Az ábrázolandó valós szám abszolút értékét (külön az egészrészt és a törtrészt) átváltjuk kettes számrendszerbe. Ez lesz a mantissza abszolút értéke. 2. lépés: A mantissza abszolút értékét megszorozzuk egy alkalmas kettő hatvánnyal, hogy teljesítse az előírt feltételt ( 12/1 <≤ m ). Ezt hívjuk normalizálásnak. Az alkalmazott kettő-hatvány kitevőjének ellentettje lesz a karakterisztika értéke. A normalizálás következtében a mantissza 2-1 helyi értékű bitje mindig 1-es értékű, így ez a bit új információt nem hordoz. Emiatt nem is tároljuk, hanem ezt a bitet kijelöljük előjelbitnek (0, ha a szám pozitív, 1, ha negatív). Tároljuk tehát a mantissza abszolút értékét kettes számrendszerben a 2-1 helyi értékű bitet előjelbitként kezelve. Ezt az ábrázolási módot szokás „majdnem kettes komplemens kódú” ábrázolásnak is nevezni. 3. lépés: A karakterisztika is előjeles szám, így meg kell oldanunk a karakterisztika előjelének a tárolását. Lefoglalhatnánk egy bitet erre a célra, de ez az ábrázolható értékhalmaz felezését vonná maga után, így emiatt nem ezt a megoldást választjuk. A rendelkezésre álló memória terület felén negatív, felén pedig nem negatív értékeket ábrázolhatunk. A karakterisztikát az ábrázolható legkisebb karakterisztika abszolút
Valós típus
29
értékével növeljük, majd egyszerűen átváltjuk kettes számrendszerbe. Ezt az ábrázolási módszert szokás „eltolt nullapontú ábrázolásnak” nevezni.
A mintafeladatok során a valós számot 6 bájtos valós típusú mennyiségként ábrázoljuk, ahol 5 bájton ábrázoljuk a mantisszát, 1 bájton a karakterisztikát, így az eltolt nullapontú ábrázolás azt fogja jelenteni, hogy a karakterisztikához 128-cat kell hozzáadni.
4. lépés: Logikailag először a mantissza bájtjai, helyi értékük szerint csökkenő sorrendben, majd a karakterisztika következnek. A fizikai (memóriabeli) sorrend a logikai sorrend megfelelőbájtjainak cseréjével alakul ki. Példaként határozzuk meg a -123.8 memóriabeli alakját!
Megoldás:1. lépés: A szám abszolút értékének egészrészét és törtrészét külön-külön átváltjuk kettes számrendszerbe.
a) Átváltjuk a 123-at kettes számrendszerbe. Osztunk kettővel – a maradékot feljegyezzük – amíg 0-át nem kapunk hányadosként.
123 161 130 015 17 13 11 10
A mantissza egész része: 1111011
b) Átváltjuk a 0.8-det kettes számrendszerbe! A konverzió során a törtrészt ismételten 2-vel szorozzuk miközben a szorzat egészrészét feljegyezzük. Ez 2-1-nel való ismételt maradékos osztásnak felel meg. A tizedespont előtt keletkező számjegyet, mely biztosan 0 vagy 1, mindig hozzáírjuk a törtrész kettes számrendszerbeli alakjához. Ha ennek során a törtrész tízes számrendszerbeli alakja egy korábbi állapotot vesz fel (ismétlődés), akkor e két állapot között keletkezett bitsorozattal ismételten növeljük a törtrész kettes számrendszerbeli alakját, mígnem kitöltjük a rendelkezésre álló helyet. Ha a törtrész tízes számrendszerbeli alakja 0-vá válik, a kettes számrendszerbeli alakot 0-val egészítjük ki.
Valós típus
30
A törtrész átváltása: Ismétlődés
A mantissza törtrésze: 1100 A mantissza normalizálás előtt 1100 1111011.m = , míg a karakterisztika 0k = .
2. lépés: Következik a normalizálás. A mantisszát 2-7-el kell szorozni, így a karakterisztika 7 lesz. A mantissza normalizálás után 1100 1111011.0m = , a karakterisztika 7k =
Mivel a 2-1 helyi értékű bit mindig 1-es, így ezt nem tároljuk, helyette a szám előjelét ábrázoljuk ezen a helyen (0, ha szám pozitív, 1, ha negatív). Az ábrázolandó szám negatív, így a 2-1 helyi értéken levő bit 1-es lesz. A mantissza 1100 1111011.0m = , a karakterisztika 7k =
3. lépés: A karakterisztika 7. A karakterisztikát 1 bájton eltolt nullapontú ábrázolással tároljuk. Ez azt jelenti, hogy a karakterisztikához hozzáadjuk a legkisebb ábrázolható karakterisztika (-128) abszolút értékét, így 135-öt kell kettes számrendszerben tárolnunk.
135 167 133 116 08 04 02 01 10
A karakterisztika: 10000111
4. lépés: Logikailag először a mantissza bájtjai, helyi értékük szerint csökkenő sorrendben, majd a karakterisztika következnek. A fizikai (memóriabeli) sorrend a logikai sorrend megfelelőbájtjainak cseréjével alakul ki.
0.8 10.6 10.2 00.4 00.8
Valós típus
31
A logikai sorrend:
1001100111101111
1001100110011001
10011001 11100001
mantissza1 mantissza2
mantissza3 mantissza4
mantissza5 karakterisztika
A fizikai sorrend:
11101111
mantissza1
10011001
mantissza4
10011001
mantissza5
11100001
karakterisztika
10011001
mantissza2
10011001
mantissza3
2. Feladat Határozd meg a -1245.275 memóriabeli alakját! Megoldás:
1. lépés: A szám abszolút értékének egészrészét és törtrészét külön-külön átváltjuk kettes számrendszerbe.
1245 1 0.275 0622 0 0.55 1311 1 0.1 0155 1 0.2 077 1 0.4 0 Ismétlődés 38 0 0.8 119 1 0.6 19 1 0.24 02 01 10
A mantissza egész része: 11001101110 , törtrésze: 0011010 A mantissza normalizálás előtt 00111.0101001101110m = , a karakterisztika 0k = .
Valós típus
32
2. lépés: Következik a normalizálás. A mantisszát 2-11-el kell szorozni, így a karakterisztika 11 lesz. A mantissza normalizálás után 001110101001101110.0m = , a karakterisztika 11k = .A szám negatív, így a 2-1 helyi értéken levő bit (előjelbit) 1-es lesz. A mantissza 00111010100.10011011m = , a karakterisztika 11k = .
3. lépés: A karakterisztika 11. Ehhez hozzá kell adnunk 128-at, így kapjuk meg a karakterisztika tárolandó értékét.
139 169 134 017 18 04 02 01 10
A karakterisztika: 10001011
4. lépés: A logikai sorrend:
11011001
mantissza1
00010101
mantissza2
00110011
mantissza3
00110011
mantissza4
00110011
mantissza5
11010001
karakterisztika
A fizikai sorrend:
11011001
mantissza1
00010101
mantissza2
00110011
mantissza3
11010001
karakterisztika
00110011
mantissza5
00110011
mantissza4
Valós típus
33
3. Feladat Mely valós szám memóriabeli alakja a következő?
01010001 00000000
00000000 00000000
10110000 10111111
Megoldás:Alkalmazzuk „visszafelé” a valós számok memóriabeli alakját előállító algoritmust! 1. lépés: Állítsuk elő bájtcserével a logikai sorrendet! A fizikai sorrend:
10111111
mantissza1
10110000
mantissza2
00000000
mantissza3
01010001
karakterisztika
00000000
mantissza5
00000000
mantissza4
A logikai sorrend:
10111111
mantissza1
10110000
mantissza2
00000000
mantissza3
00000000
mantissza4
00000000
mantissza5
01010001
karakterisztika 2. lépés: Határozzuk meg a karakterisztikát! A karakterisztika bináris alakja eltolt nullapontú kódot jelent. Eszerint kettes számrendszerben ábrázolt pozitív egész szám decimális alakját kell meghatározni, majd levonni belőle az eltolás mértékét, amely esetünkben 128. Tehát az eltolt karakterisztika: k’=21+23+27=2+8+128=138. A valódi karakterisztika: k=k’-128=10.
Valós típus
34
3. lépés: Írjuk fel az ábrázolt szám valódi bináris alakját! Ehhez a normalizált mantisszát megszorozzuk a karakterisztikával azonos kitevőjű kettő-hatvánnyal. A mantissza 000011010.11111101m =
Ne felejtsük el a 2-1 helyi értéken levő bit jelentését! Itt 1-es áll, ami azt jelenti, hogy az ábrázolt szám negatív. Ha 0 lenne ez a bit, akkor jelentés szerint pozitív a szám, de az abszolút érték megállapításához természetesen 1-esként kell figyelembe venni, hiszen ezen a helyi értéken mindig 1-esnek kell állnia a normalizálás miatt. A normált mantissza 000011010.11111101m = , a karakterisztika 10k = .A szám abszolút értékének kettes számrendszerbeli alakja:
.0011011111110100X =
4. lépés: Számítsuk ki a szám tízes számrendszerbeli alakját! A szám abszolút értékének egész része: [ ]X =22+24+25+26+27+28+29=4+16+32+64+128+256+512=1012 A szám abszolút értékének törtrésze: { }X =2-3+2-4+2-6=1/8+1/16+1/64=0.203125
Tehát X =1012.203125
5. lépés: Mivel a mantissza előjelbitje 1 volt, így az ábrázolt szám: X=-1012.203125
4. Feladat Mely valós szám memóriabeli alakja a következő?
01011110 00000000
00000000 00000000
10011001 00100110
Valós típus
35
Megoldás:
1. lépés: Állítsuk elő bájtcserével a logikai sorrendet! A fizikai sorrend:
00100110
mantissza1
10011001
mantissza2
00000000
mantissza3
01011110
karakterisztika
00000000
mantissza5
00000000
mantissza4
A logikai sorrend:
00100110
mantissza1
10011001
mantissza2
00000000
mantissza4
01011110
karakterisztika
00000000
mantissza5
00000000
mantissza3
2. lépés: Határozzuk meg a karakterisztikát! Az eltolt karakterisztika: k’=21+23+24+25+26=2+8+16+32+64=122. A valódi karakterisztika: k=k’-128=122-128=-6 3. lépés: Írjuk fel az ábrázolt szám valódi bináris alakját! A mantissza 100110010.01100100m = . A mantissza 2-1 helyi értékén levő bit 0. Ez azt jelenti, hogy az ábrázolt szám pozitív, de az abszolút érték kiszámításakor 1-es értékként kell figyelembe venni, hiszen normalizált esetben itt mindig 1-es áll. A normalizált mantissza 100110010.11100100m = , a karakterisztika 6k −=
A szám abszolút értékének kettes számrendszerbeli alakja: 100110010010010.00000011X =
Valós típus
36
4. lépés: Számítsuk ki a szám tízes számrendszerbeli alakját! A szám abszolút értékének egész része 0, A szám törtrészének értéke: { }X =2-7+2-8+2-9+2-12+2-15+2-18+2-19+2-22=
1/128+1/256+1/512+1/4096+1/32768+1/262144+1/524288+1/4194300= =0.013952 5. lépés: A szám előjelbitje 0 volt, így az ábrázolt szám értéke: X=0.013952
5. Feladat Határozd meg az ábrázolható legkisebb pozitív valós szám memóriabeli alakját! Megoldás:Az X=m*2k alakú szám annál kisebb minél kisebb a mantissza és a karakterisztika értéke. Ezért megkíséreljük egymástól függetlenül a lehető legkisebbre csökkenteni őket. 1. lépés: Először a mantisszát minimalizáljuk. Az m a legkisebb, ha 1/2, hiszen normalizált alakban ábrázolunk. Ennek bináris alakja:
00000000
mantissza5
00000000
mantissza1
00000000
mantissza2
00000000
mantissza4
00000000
mantissza3
Itt az előjelbit 0, hiszen pozitív számról van szó. 2. lépés: Legkisebb a k, ha -128. Mivel a csupa 0 bit mantissza értéke 1/2, nincs 0 értékű mantissza. Így a 0 ábrázolása nem múlhat a mantisszán. Ezért a -128 értékű karakterisztika tetszőleges mantisszával definíció szerint jelenti a 0-át. Így a legkisebb használható karakterisztika a -127. Ezt eltolva 128-cal 1-et kapunk. Ezt átváltva kettes számrendszerbe kapjuk a karakterisztika bináris alakját: 00000001
Valós típus
37
3. lépés: Következésképpen az ábrázolható legkisebb pozitív valós szám X=1/2*2-127. Ennek bináris alakja:
00000000
mantissza1
00000000
mantissza2
00000000
mantissza4
00000000
mantissza3
00000000
mantissza5
10000000
karakterisztika 4. lépés: Végül a fizikai sorrend a következő:
00000000
mantissza1
00000000
mantissza2
00000000
mantissza3
10000000
karakterisztika
00000000
mantissza5
00000000
mantissza4
Valós típus
38
Gyakorlófeladatok
1. Határozd meg az alábbi valós számok memóriabeli alakját! -11.45; -121.1875; 1236.15; 13210.234; -13210.125; -360.0234; 1005.75; -100.35; 50.1275
2. Határozd meg a megfelelő valós számokat az alább látható memóriabeli alakjukból!
a)
11001101 0000000000000000 0000000000000000 00101111
b)
11000100 0000000000000000 0000000000100010 00101001
c)
11010101 0000000000000000 0000000000101010 00101111
d)
01011100 1001100110011001 1001100110010101 00101111
e)
01001101 0010001000100010 0010001010010101 00101111
3. Határozd meg az ábrázolható legnagyobb valós szám memóriabeli alakját! 4. Határozd meg az ábrázolható legkisebb valós szám memóriabeli alakját!
5. Határozd meg az ábrázolható legnagyobb negatív valós szám memóriabeli alakját!