2. fejezet: Matematikai alapok

Befejezve: 2003.

logo 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:
128
64
32
16
8
4
2
1
-
( 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

 
A NEM A
1 1
0 1
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évByte (db)MinimumMaximum
Byte10255
Word20216-1 = 65535
ShortInt1-128+127
Integer2-215 = -32768 +32767
LongInt4-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 Msb F Lsb Msb E Lsb
Í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ípusSFE ÖsszesMinMaxPontosság
Bit BitByteÁbrázolható szám(jegy)
Real1398486 2,9*10-391,7*10+3811-12
Single1238324 1,5*10-453,4*10+387-8
Double15211648 5,0*10-3241,7*10+30815-16
Extended163168010 3,4*10-49321,1*10+493219-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! ;-)