HTML

C#, hogy megértsd!

C# az alapoktól, azért, hogy megértsd... Nem 24óra alatt:P

Friss topikok

Archívum

2010.02.07. 14:01 Beginpro

4. Számrendszerek

Miután már kissé megismertük a számítógép egyes részeit, fontos megismerkedni a számítógép nyelvével. A számítógép csak 0 és 1 segítségével dolgozik. Azért nem zavarodik össze, mert a CLK segítségével állandó ciklusokban dolgozik, (kivétel ha nem :P)és külön vezetéken (továbbiakban sin vagy busz) küldi az adatot, címet, vezérlőjelet... A számítógépben sínrendszerek működnek, melyeken egyesek és nullák áram formájában közlekednek. Egyes kivételes esetekben nem, de ez számunkra nem lényeges, ez hálózati technológia kérdése. Fontos, hogy tudjuk, hogy ezeket a számokat a számítógép, hogy tárolja, valamint miként végez velük műveletet.

Programozás szempontjából három számrendszert szükséges ismernünk:

  1. Bináris számrendszer (Jele: B)
  2. Decimális számrendszer (Jele: D)
  3. Hexadecimális számrendszer (Jele: H)

Feltételezem, hogy a decimális számrendszet (hétköznapi 0-9-ig terjedő számok) mindenki ismeri. Először decimálisból váltunk át binárisba. Vegyük mondjuk a 18-at. Ezt a számot többféleképpen át lehet váltani, általában nem úgy tanítják, ahogy most elmondom. Ahhoz, hogy felírjuk a 18-at binárisan fel kell írni a kettő hatványait:

2^0=12^1=22^2=42^3=82^4=162^5=32
010010
2   1 
      


Ahhoz, hogy a 18-at fel lehessen írni tudni kell a kettő hatványait (fenti táblázat első sora). Második lépés, hogy megvizsgáljuk a 18-at. Ez kisebb mint 32, tehát ezt ilyenkor nem figyeljük. Nézzük a következőt 16 kisebb mint 18, tehát ebbe a kockába írunk egy egyest (második sor). Mivel a tizenhatos mezőbe írtunk egy "1"-est kivonjuk a 18-ból a 16-ot. Ekkor marad 2, és ezt vizsgáljuk a továbbiakban. Nyolcnál a kettő kisebb, ezért nem vesszük figyelembe, négynél szintén kissebb 2. Elérkeztünk kettőig, ami megyeggyezik a kettőnkkel, ezért oda írunk egy "1"-est. Kivonjuk a 2-2=0, ekkor eltűnt a számunk. Az üres helyeket fel kell tölteni "0"-val, és kész a bináris számunk, csak visszafelé ki kell olvasnunk. Tehát a 18D=010010B=10010B. A legelső 0-a elhagyható, mert nem értelmezhető mint az se ha azt írjuk decimálisan, hogy 018, mert ez egynelő 18-al.

A hexadecimális számrendszer (16-os számrendszer) 0-tól 15-ig tartalmaz számokat. Ezek a következőek: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Ebbe a számrendszerbe átváltani a számokat binárisból a legkönyebb. A bináris számsort a végéről indúlva fel kell bontani négyesével, és a négyes csoportot átváltva decimálisba csak le kell írni a számot. Ha 9 feletti szám jön ki, akkor a betűket kell használni tehát: A=10, B=11 ... F=15. Néhány példa az átvátásra: 0110B=6H=6D, 1111B=FH=15D, 1101101B([0110][1101]négyes csoportra bontva)=6DH=109D. Tehát a táblázatban beli 18D=12H (a táblázatot ilyenkor visszafelé kell olvasni!).

Bináris számok összeadásához nem sok gondolkozás szükséges. Adott mondjuk 6D=110B és a 2D=10B, ezt ha össze szeretnénk adni egymás alá fel kell írni helyiérték szerint, és a hiányzó helyeket 0-ával kell kitölteni. Tehát:

   110
  +010
  1000

Decimális írásban összeadáshoz hasonlóan az utolsó helyiértéket kell nézni. Nulla meg Nulla egyenlő Nulla, ezt leírjuk. A következő Egy meg Egy az mennyi? Kettő a kettő binárisan 10, tehát leírjuk az utolső helyiértékét ami a Nulla és fenmarad az Egy. A következő helyiértéke 1+1+0, mert hoztuk az átvitelt. Ennek az eredménye 10, leírjuk a 0-át, majd a következő helyiértékre az ismét átvitt 1-et. Tehát az eredmény 1000B=8D.

Mindenki tudja, hogy a processzor csak összeadni tud, ez az általános nézet. Ez lényegében igaz, viszont tud komplemnst képezni is. Tehát ez már két művelet. Az igazság az, hogy a processzor konkrétan se összeadni, se komplemenst képezni nem tud, csak logikai kapcsolatokat felállítani a benne rejlő elektronikus kapukkal. Ezek rejtelmeibe nem kívánok belemenni, mert programozás szempontjából nem fontos. Maradjunk annyiban, hogy a processzor összead, és komplemenst képez.

A kivonás egy olyan folyamat, amit a számítógép úgy végez, hogy a kivonandó számnak leképzi a komplemensét, és ezt hozzáadja a másik számhoz. Többféle komplemensképzési technika létezik mi most csak az egyiket nézzük meg.

Kettes Komplemens:

Kettes komplemens képzése a legegyszerűbb. Hivatalosan a negatív számot úgy képezzük, hogy a pozitív érték egyes komplemenséhez hozzáadunk eggyet. Mivel az egyes komplemenst nem tárgyaljuk, inkább mutatom a trükköt:

Adott a 100111101101000, ennek a számna a kettes komplemense 011000010011000. Az átváltás nagyon egyszerű! Elkezdünk a szám végéről visszafelé haladni, ha 0-van akkor leírjuk addig, amíg eggyest nem találunk. Ha 1-est találunk azt még leírjuk, az összes többit megfordítjuk, (negáljuk) tehát az 1-ből 0, 0-ból 1 lesz. Ha ezt a számot egyszerű hozzáadással hozzáadjuk a másik számhoz, kivonás történik.

A számítógép a szorzást, úgy végzi, hogy annyiszor adja össze a számot, ahányszor szorozzuk. Az osztás szintén így történik, csak a kivonás művelet segítségével.

A negatív számokat az előjelbit jelzi. Ha az előjelbit 1 akkor negatív a szám egyébként pozitív.

A számokat a számítógép bitcsoportokban tárolja. A tört számokat lehet fix, és lebegőpontosan ábrázolni. Ha a bitcsoportba nem fér el a megadott szám, akkor túlcsordulás történik, és az eredmény hibás lesz. Ilyenkor a Carry flag "1"-be vált. Ez egy jelzőbit a processzorban. Fixpontos ábrázolásnál a bitcsoport úgy néz ki, hogy első bit az előjel "Signum", x mennyiségű bit az egészrész, míg y mennyiségű a törtrészt tárolja. Lebegőpontos ábrázolásnál első mit a signum, következő rész a mantissza, ami a konkrét szám normál alakja. A második rész a karakterisztika, ami az eltolást tartalmazza.
 

Szólj hozzá!


A bejegyzés trackback címe:

https://csharp.blog.hu/api/trackback/id/tr561736390

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása