2. fejezet: Matematikai alapok
Befejezve: 2003.
Ez a fejezet a középiskolás diákok számára kötelező, ezért került
bele a könyvbe. A fejezet kihagyásával is folytatható a könyv, de a könyv
teljes megértéséhez elengedhetetlen ez a fejezet is! Feltételezés, hogy az
információ, illetve az adat fogalmával minden olvasó tisztában van. (Hétköznapi
értelemben!)
A számítógépben lévő összes művelet, minden
adat és információ ki-be forgalmazása a kettes számrendszeren alapul.
A számítógép elemi cellájában az ilyen információt tárolja.
Feszültség
|
Logikai érték
|
Számérték
|
van
|
Igen
|
1
|
nincs
|
Nem
|
0
|
Az ilyen elemi, tovább már nem osztható információt hívjuk 1 bitnek.
Sokan a bitet az információ alapegységének is hívják. 8 darab
bit egymásutánja egy byte. Egy byte lehetséges értékei: 0
<= byte <= 255. Az alábbi példa 4 byte lehetséges értékeit mutatja:
7. bit
|
6. bit
|
5. bit
|
4. bit
|
3. bit
|
2. bit
|
1. bit
|
0. bit
|
byte
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
7
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
0
|
100
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
255
|
Tízes helyiérték:
( A pontos kiszámítási formula a következő:
, ahol bi az i. bit tartalma.)
2.1. feladat: - Készítse el az alábbi, tízes számrendszerbeli számok
kettes számrendszerbeli alakját: 4,5, 9, 15, 16, 33, 45, 48, 99, 120, 127,
129, 199, 200, 212, 222, 235, 244, 254
Éppen a kettes számrendszer fontossága miatt a további osztályozás is
a 2 hatványai szerint történik! (Megjegyzés: 210 = 1024)
1 kilobyte |
= 1 KB |
= 1024 byte |
|
1 MegaByte |
= 1 MB |
= 1024 KB |
= 1 048 576 byte
|
1 GigaByte |
= 1 GB |
= 1024 MB |
= 1 073 741 824 byte
|
1 TerraByte |
= 1 TB |
= 1024 GB |
= 1 099 511 627 776 byte
|
Az elkövetkezendő időkben sokszor fogjuk használni
az alapvető logikai műveleteket, így ezekkel jobb tisztában lenne. A logikai
műveletekkel állítások igazságtartalmára tudunk következtetni.
Például: Ha egy természetes szám prímszám és páros, akkor
az a kettő.
1. állítás: a szám prím.
2. állítás: a szám páros.
Logikai művelet: ÉS.
Következtetés: a szám a kettő.
Például: Mivel erős szemüveget hordasz,
vagy kontaktlencséd van, ezért rossz a szemed.
1. állítás: erős szemüveged van.
2. állítás: kontaktlencséd van.
Alkalmazott művelet: VAGY.
Következtetés: rossz a szemed.
A logikai műveleteket természetesen össze
is tudjuk fűzni, így bonyolult állításokat is elő tudunk állítani.
Például: Ha egy természetes szám páros és nem nulla és kisebb,
mint tíz és hárommal osztható, akkor az a szám a hat.
1. állítás: a szám páros.
2. állítás: a szám NEM nulla. (Alkalmazott művelet: a NEM)
3. állítás: a szám kisebb, mint tíz.
4. állítás: a szám hárommal osztható.
Alkalmazott művelet: ÉS - többszörösen, valamint a kiemelt esetben a NEM.
Következtetés: a szám a hat.
Három ilyen alapvető logikai művelet van,
amit a számítástechnika lépten-nyomon felhasznál:
- a NEM (angolul: NOT)
- az ÉS (angolul: AND)
- a VAGY (angolul: OR)
Természetesen ezeken kívül még nagyon sok logikai
művelet építhető fel pár állításból, itt csak eme három alapvető művelet
igazságtáblázata szerepel.
Olvasásuk: Ha A igaz (A=1) ÉS B is igaz (B=1), akkor A ÉS B is igaz.
Ha A hamis (A=0) VAGY B igaz (B=1), akkor A VAGY B igaz.
A |
B |
A ÉS B |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
A |
B |
A VAGY B |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
2.2. feladat: Hozzon további példákat logikai állításokra és következtetésekre!
2.3. feladat: Ha A=0, B=1, C=1 és D=0, akkor mi az alábbi állítások
igazságtartalma?
- (A ÉS B) VAGY (C ÉS D)
- (A VAGY C) ÉS (D VAGY C) ÉS B
- (A VAGY B VAGY C) ÉS (B VAGY C VAGY D)
- NEM(A ÉS D) ÉS NEM(B VAGY C)
5.1.) Számábrázolások a Pascal-típusú nyelvekben
Egész típusú számábrázolások
Alapvetően pár fajta egész szám van. A legegyszerűbb az egyetlen bájton létrehozott BYTE típus.
Ha minden bitje = 0, akkor az értéke is 0. Ha az utolsó bit = 1, akkor az értéke 1; stb.
Maximális érték 255. Feltétele: minden bit = 1.
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Átszámításhoz egy kis segítség:
Konkrét számításoknál minden olyan hatványértéket figyelembe kell venni, ahol a bitérték 1.
Ezeket kell simán összeadni. Érdemes az alábbi 3 példát végigcsinálni!
1. pl.: 0001.10102 = 2610
2. pl.: 0101.10112 = 9110
3. pl.: 1110.11002 = 23610
Következő típus a szó (WORD), amikor ugyanez 2 bájton történik. Fontos, hogy az első
bájt legelső bitje a legmagasabb helyiértékű.
Itt is van egy kis segítség:
215 |
214 |
213 |
212 |
211 |
210 |
29 |
28 |
27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
32768 |
16384 |
8192 |
4096 |
2048 |
1024 |
512 |
256 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Ezek az átszámítások már egy körrel nehezebbek, ugye?
Újabb három példa álljon itt:
1. pl.: 0101.1011.0001.10102 = 91*256+2610 = 2332210
2. pl.: 0001.1010.0101.10112 = 26*256+9110 = 674710
3. pl.: 0001.1010.1110.11002 = 26*256+23610 = 689210
Visszafelé (decimálisból binárisba) az átváltás már kevésbé könnyű. Először is keressük meg azt a
legnagyobb hatványértéket, amely még nem nagyobb az átváltandó számnál, és vonjuk ki a kivonandóból.
Magyarul: 23322-nél a 32768 nagyobb (215 bit=0), de a 16384 nem nagyobb (214
bit=1), így a 23322-16384 = 6938 kivonást kell végrehajtanunk. A következő érték 8192, ami nagyobb
így a 213 bit=0 lesz. Ám a következő érték a 4096 megint kisebb a 6938-nál, így a
6938-4096=2842 kivonás lesz. (212 bit=1) Aztán megint jön egy értékes bit, mivel
2842>2048. (Tehát 211 bit=1.) Marad 794. Így a 210 bit=0 lesz. A következő
kivonás: 794-512=282. (29 bit=1) Aztán megint jöhet egy értékes bit, mivel 282>256.
(28 bit=1) Maradék: 26. Tehát az első bájt teljes egészében: 0101.10112.
Hasonlóképpen érdemes végigkínlódni a második bájtot is…
Negatív egészek
Ilyen esetben az első bájt legelső bitje előjel-bitté válik. Vagyis ha az első bit=0,
akkor a mögötte lévő szám pozitív, különben negatív. De ilyenkor kétféle 0 lenne, a pozitív és a
negatív. Ez így nem logikus, tehát a negatív számokhoz még egyet hozzá kell adni. Például
a 001.01112=2310. Ez így pozitív szám 7 biten. Ha a legelső, előjelbitet
(Sign-bit) 0-ra állítjuk be, akkor a helyes értéket írjuk le. A 7 bit kettes komplementere
(ellentettje) a következő: 110.10002. (Magyarul ahol 0 volt, 1 legyen és fordítva, ahol
1 volt, 0 legyen.) Viszont ehhez hozzá kell adni még 1-et. Így lesz a 7-bites szám:
110.10012. Ráadásul még eléje kell tenni az előjel-bitet, ami 1 lesz. Így az
1110.10012= -2310.
Másik számítás: Adott a 9110=101.10112. Hogyan is lesz ez negatív?
Először is vegyük a kettes komplemensét: 010.01002. DE! Ehhez hozzá kell
adni még 1-et! Így a helyes kettes szám: 010.01012.
Mivel negatív számról beszélünk, ezért kell az 1-es előjelbit is.
Tehát a helyes végeredmény: 1010.01012.
Ezt a típust a Pascal nyelvekben SHORTINT-nek nevezzük (1 bájt). Nagyságrendileg:
-128 <= ShortInt <= +127.
Ugyanezt két bájton már INTEGER-nek nevezzük. -32.768 <= Integer <= +32.767.
A legnagyobb egész szám-tartomány a 4 bájtos LONGINT.
Nagyságrendben: -231 <= LongInt <= +231-1.
Összefoglalva az egészeket
Név | Byte (db) | Minimum | Maximum |
Byte | 1 | 0 | 255 |
Word | 2 | 0 | 216-1 = 65535 |
ShortInt | 1 | -128 | +127 |
Integer | 2 | -215 = -32768 |
+32767 |
LongInt | 4 | -231 = 2 147 483 648 |
+231-1 = 2 147 483 647 |
Valós típusú számábrázolások
Ez már bonyolultabb gondolkodást igényel. Alapvetően meg kell előbb érteni a 10-es számrendszerben
alkalmazott valós számábrázolást.
Ez a következőképpen alakul: Mantissza*10exponens.
Tízes számrendszerben a példa: 6*104 = 6 * 10000 = 60000.
Hasonlóan megy a módszer a tizedes törteknél is, azaz: 2,4*10-2 = 2,4 * 0,01 = 0,0024.
Nos, a kettes számrendszerekben a bináris számábrázolásnál valami hasonló történik.
Valós számok tárolásakor a következő történik:
- S = Sign-bit : Előjel-bit (1 bit)
- F = Szignifikáns tizedese: (értsd:) Mantissza - valós szám (39 bit)
- E = Exponens : Kitevő - egész szám (8 bit)
- Msb = Legnagyobb értékű bit
- Lsb = Legkisebb értékű bit
Így a teljes valós szám a következőképpen néz ki:
±S * F * 2E
Tehát az S-bit kizárólag a teljes szám előjeléért felelős. A Mantissza (F) a következőképpen
alakul ki - bitenként: 1/2 + 1/4 + 1/8 + 1/16 + 1/32 + 1/64 + 1/128.
Ezen törtekből csak azokaz kell figyelembe venni, ahol a megfelelő bit 1-es értékű.
Például a 17/128-ad törtnél figyelembe kell venni az 1/8-ot és az 1/128-adot. Összegük 17/128-as lesz,
így a megfelelő bit-minta: 001.0001 lesz.
Bár a fenti példa csak 7-bites, de a teljes valós számoknál ennél sokkal kifinomultabb, azaz
sokkal többjegyű számábrázolásra nyílik lehetőség.
Ezt a kész mantisszát össze kell szorozni egy egész szám formájában ábrázolt kettes hatvánnyal.
Például a fenti példában szereplő 17/128-adot össze lehet szorozni 128-cal, így az ábrázolt szám
immáron a 17 lesz, de valós számként.
A Pascal nyelvekben alapvetően 4-féle valós szám létezik:
Típus | S | F | E |
Összes | Min | Max | Pontosság |
Bit |
Bit | Byte | Ábrázolható szám | (jegy) |
Real | 1 | 39 | 8 | 48 | 6 |
2,9*10-39 | 1,7*10+38 | 11-12 |
Single | 1 | 23 | 8 | 32 | 4 |
1,5*10-45 | 3,4*10+38 | 7-8 |
Double | 1 | 52 | 11 | 64 | 8 |
5,0*10-324 | 1,7*10+308 | 15-16 |
Extended | 1 | 63 | 16 | 80 | 10 |
3,4*10-4932 | 1,1*10+4932 | 19-20 |
Egyes nyelvekben előfordulhat, hogy a mantissza és az exponens helye felcserélődik, de olyan is
előfordulhat, hogy a mantissza első jegyét (ami automatikusan 1-es) kihagyják.
Tisztában vagyok vele, hogy nem egyszerű, de némi gyakorlással azért bele lehet jönni! ;-)