Basiskennis informatica/Numerieke gegevens

Uit Wikibooks

Ga naar: navigatie, zoek

Numerieke gegevens zijn data in getalvorm. Data worden in een computer opgeslagen als bitrijen, rijen enen en nullen. Aan zo'n rij is niet te zien of het een getal of een ander symbool betreft. Stelt de rij een getal voor, dan moet op de een of andere manier de rij bits als getal geïnterpreteerd worden. Daarvoor moeten we weten wat voor soort getal de rij voorstelt en hoe zo'n getal gecodeerd is, we zeggen wat voor getalsrepresentatie gebruikt is.

De bitrij wordt vaak ook opgevat als een binair getal. Zo'n getal is voor gewone stervelingen, door die vele nullen en enen zeer onoverzichtelijk. Daarom worden de bits wel in groepjes van drie of vier bij elkaar genomen, en zo'n groepje vervangen door een "cijfer". Een groepje van drie kan voorgesteld worden door een van de 8 cijfers 0 t/m 7. Het binaire getal getal wordt op deze manier geschreven in een ander talstelsel, nl. het octale stelsel. Nemen we groepjes van vier bits samen, dan kan zo'n groepje een van de 16 getallen 0 t/m 15 voorstellen. Willen we zo'n groepje door een "cijfer" weergeven, dan hebben we niet genoeg aan de gewone cijfers 0 t/m 9. Daarom breiden we de cijfers uit met de letters A t/m F, die nu ook als cijfer dienst gaan doen. Het binaire getal wordt zo geschreven in weer een ander talstelsel, nl. het hexadecimale stelsel.

Inhoud

[bewerken] Voorbeeld

Het binaire getal 101110010011111 verdelen we in groepjes van steeds drie bits en vervangen elk groepje door het overeenkomstige cijfer::

101.110.010.011.111 -> 5.6.2.3.7

De octale weergave is dus:

1011100100111112=562378

In groepjes van vier bits krijgen we:

0101.1100.1001.1111 -> 5.C.9.F

De hexadecimale weergave is dus:

1011100100111112=5C9F16

In plaats van de index 16 wordt ook wel een H geschreven: 5C9FH

De octale en hexadecimale voorstelling zijn voor ons veel overzichtelijker en hanteerbaarder dan de binaire. Omdat de octale en hexadecimale talstelsel nauw verwant zijn met het binaire, kunnen getallen gemakkelijk van het ene naar het andere stelsel omgezet worden.


[bewerken] Talstelsels

[bewerken] Inleiding tot talstelsels

Om te kunnen begrijpen wat een decimaal, een binair, een octaal en een hexadecimaal talstelsel eigenlijk zijn, is het eerst nodig uit te leggen wat een talstel eigenlijk is. Eens dit duidelijk is zal men zien dat alle telstelsels eigenlijk toepassing zijn van hetzelfde (eenvoudige principe).

Het 'gewone' talstelse dat iedereen dagelijks gebruikt om te tellen is het decimaal of het tiendelig talstelsel. Hoe men aan tiendelig komt is makkelijk te verklaren. Een mens heeft immers tien vingers. Wanneer mens een kind wil leren tellen zal dit kind op zijn vingers gaan tellen en eens de tien gepasseerd doen de eerste problemen zich voor.

Tien is dus de basis van het decimale talstelsel, wat is nu deze basis eigenlijk? Wel gegeven een getal in een basis b:

123456(b)

Eigenlijk staat hier:

1\cdot b^5 + 2\cdot b^4 + 3\cdot b^3 + 4 \cdot b^2 + 5 \cdot b^1 + 6 \cdot b^0

Stel nu dat b gelijk zou zijn aan tien, en het dus een decimaal getal betreft dan kunnen we de vorige uitdrukken herschrijven als:

1\cdot 10^5 + 2\cdot 10^4 + 3\cdot 10^3 + 4 \cdot 10^2 + 5 \cdot 10^1 + 6 \cdot 10^0

Of in termen van eenheden, tientallen, honderdtallen, duizendtallen, etc:

1 * 100000 + 2 * 10000 + 3 * 1000 + 4 * 100 + 5 * 10 + 6 * 1

En zelfs, van beide is makkelijk te verifiëren dat ze allen hetzelfde getal tot resultaat hebben:

100000 + 20000 + 3000 + 400 + 50 + 6

Daar een computer in wezen niets anders is dan een hoopje elektronica en daar (digitale) elektronica maar twee standen kent, stroom of geen stroom. Werken computers met een basis van '2'. Voor mensen daarentegen is binair niet handig. Het getal 65536 vereist maar 5 cijfers om op papier genoteerd te worden. Wanneer dit binair uitgeschreven zou worden zou dit een 1 met 15 nullen zijn. Daardoor is men geneigd om zulke getallen te gaan samennemen. Een binair een octaal en een hexadecimaal talstelsel hebben respectievelijk een basis van 2, 8 (23) en 16 (24). Hieruit volgt dat bij octaal de bits in groepen van drie samengenomen worden en bij hexadecimale notatie in groepen van 4. Het vorige voorbeeld: 65536 wordt dan in de vier aangehaalde talstelsels:

65536(10) = 10000000000000000(2) = 200000(8) = 10000(16)

Bemerk in het bovenstaande voorbeeld dat hoe groter de basis is, hoe minder cijfers nodig zijn om een getal voor te stellen.

De mogelijke cijfers gebruikt bij de notatie in een talstelsel zijn alle getallen tussen 0 en de basis. Nul inclusief, de basis exclusief. Dus een in getal met basis b kan men alle getallen verwachten uit de verzameling \left\{0,1,2,...,b-2,b-1\right\}. Bij een octaal talstelsel zijn dit dus de getallen van 0 tot en met 7. Bij hexadecimaal zullen A tot en met F gebruikt worden voor de getallen 10 tem 15.

Nu de link tussen de talstelsels onderling en tussen de talstelsels en hun basis gelegd is, kan makkelijk uitgelegd worden hoe dieper ingegaan kan worden op conversie tussen twee talstelsel.

[bewerken] Het decimale talstelsel of ons 'gewone talstelsel'

Dit zijn de cijfers van 0 tot 9

Wanneer men verschillende talstelsels gebruikt, dan wordt naast het decimale cijfer de notatie (10) gezet.

Vb: cijfer 3 = 3(10)

[bewerken] Het binaire talstelsel

Het binaire talstelsel bestaat enkel uit enen en nullen (0 en I), binaire code wordt ook wel machinetaal genoemd. Het is de taal van de processor.

Wanneer men naar een getal wil refereren als binair getal, dan wordt er naast het cijfer het bijschrijft (2) gezet.

Vb: 367 binair = 367 (2) (niet mogelijk, binaire getallen kunnen enkel 0 en 1 bevatten)
Vb: 100101 binair = 100101(2)


[bewerken] Het hexadecimale talstelsel

Het hexadecimale talstelsel is een zestiendelig talstelsel dat zeer veel gebruikt wordt. Het bestaat uit de cijfers 0 tot 9 en de letters A tot en met F.

Wanneer men naar een getal refereert als zijnde hexadecimaal, dan wordt er naast het getal (16) genoteerd.

Vb: 245 hexadecimaal = 245(16)

Binair (2) Hexadecimaal (16)
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A (10)
1011 B (11)
1100 C (12)
1101 D (13)
1110 E (14)
1111 F (15)

[bewerken] Het octale talstelsel

Het octale talstelsel is een achtdelig talstelsel, bestaande uit de nummers 0 tot en met 7. Wanneer naar een getal gerefereerd wordt als zijnde octaal, dan krijgt dit het bijschrift (8).

Vb: 125 octaal = 125(8)

Binair(2) Octaal(8)
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

[bewerken] Omzetting tussen talstelsels

De omzetting van binair naar octaal, binair naar hexadecimaal, octaal naar binair en hexadecimaal naar binair kunnen gedaan worden door gebruik te maken van de tabellen hierboven vermeldt.
Omzetten van binair naar decimaal en van decimaal naar binair vergen wat rekenwerk. Om van hexadecimaal naar decimaal, van octaal naar decimaal, van decimaal naar hexadecimaal en van hexadecimaal naar decimaal om te zetten kan je best eerst omzetten naar binair en dan van binair terug om te zetten naar het gewenste talstelsel.

Omzetting van binair naar octaal

Om een getal om te zetten van binair naar octaal, deel je het getal op in groepjes drie tekens(digits). Hierna vervang je de groepjes met de waarde die overeenstemt in de kolom van de octale waarden. Je begint van rechts en gaat zo verder naar links.

Bv: 10010110101(2)

Dit getal kunnen we opdelen in vier groepjes van drie tekens.

010 010 110 101(2)

Hieronder worden de groepjes van rechts naar links omgezet in octale waarden. Hiervoor werd gebruik gemaakt van bovenstaande tabel

101(2) = 5(8)

110(2) = 6(8)

010(2) = 2(8)

010(2) = 2(8)

Dit betekent dat het binaire getal 10010110101(2) de octale waarde 2265(8) heeft.

Omzetting van binair naar hexadecimaal

Om een getal om te zetten van binair naar hexadecimaal kan je de dezelfde bewerking gebruiken zoals degene die voor octale getallen gebruikt wordt. Het enige verschil is dat we hier het binaire getal opdelen in groepjes van vier in plaats van drie.

Bv: 10010110101(2)

Dit getal gaan we nu opdelen in drie groepjes van vier tekens.

0100 1011 0101(2)

Nu zetten we de binaire waarden om in hexadecimale waarden, te beginnen van rechts.

0101(2) = 5(16)

1011(2) = B(16)

0100(2) = 4(16)

Het binaire getal 10010110101(2) heeft de hexadecimale waarde 4B5(16).

Omzetting van binair naar decimaal

Gedenk het onderdeel Inleiding tot talstelsels en uiteindelijk kan men niets anders doen dan concluderen dat dit eigenlijk zeer eenvoudig is. De mogelijke cijfers zijn 0 of 1 en de basisgetallen zijn machten van 2. Dus een binair getal van de vorm  a_{n}a_{n-1}a_{n_2}\cdots a_{3}a_{2}a_{1}a_{0} welke herschreven kan worden tot a_{n}\cdot 2^{n} + a_{n-1}\cdot 2^{n-1}+\cdots +a_{3}\cdot 2^{3} + a_{2} \cdot 2^{2} + a_1\cdot 2^{1} + a_{0} \cdot 2^{0}. Dit is op zich misschien redelijk abstract, maar met een voorbeeldje wordt dit sneller duidelijk. Gegeven het volgende 16 bits getal:

1011010110011101(2)

Dit is gelijk aan (de vermenigvuldigingen waarbij nul een van operanden is werden voor het gemak weggelaten):

1\cdot 2^{15} + 1\cdot 2^{13} + 1\cdot 2^{12} + 1\cdot 2^{10} + 1\cdot 2^8 + 1\cdot 2^7 + 1\cdot 2^4 + 1\cdot 2^3 + 1\cdot 2^2 + 1 \cdot 2^0

Welke op zijn beurt gelijk is aan:

32768 + 8192 + 4096 + 1024 + 256 + 128 + 16 + 8 + 4 + 1

Welke het eindresultaat 46493 in het tiendelig stelsel oplevert. (Verifieer zelf even of u erin slaagt dit binair getal te herleiden tot B59D(16) en 132635(8)).

Omzetting van decimaal naar binair

Er zijn twee courante methodes om een omzetting uit te voeren van het decimale talstelsel naar het binaire. Een eerste methode gaat telkens de grootste macht van twee aftrekken. Een tweede methode maakt gebruik van de modulo.


Methode 1

Gegeven een getal b, zoek de grootste macht van twee (e) die nog in dit getal past, schrijf een 1 vooraan het binair getal. Trek deze macht van twee af van het getal b, dit wordt de nieuwe b. Is \frac{e}{2}(de grootste macht van twee die dit getal getal deelde, gedeeld door twee d.i. de vorige bitpositie) kleiner dan dit getal ? Zoja schrijf een één, zoneen schrijf een nul. Bereken nu de nieuwe b en e en herhaal tot b nul is. Voorbeeld met het getal 313:

313 is groter dan 2^8 (256) en kleiner dan 2^9 (512). Dus we zoeken een getal van (exponent + 1) bits.

Rest      Deler         Resultaat     
313    -> 2^8 of 256 -> 1xxxxxxxx
57     -> 2^7 of 128 -> 10xxxxxxx
57     -> 2^6 of  64 -> 100xxxxxx
57     -> 2^5 of  32 -> 1001xxxxx
25     -> 2^4 of  16 -> 10011xxxx
9      -> 2^3 of   8 -> 100111xxx
1      -> 2^2 of   4 -> 1001110xx
1      -> 2^1 of   2 -> 10011100x
1      -> 2^0 of   1 -> 100111001
0 <- STOP

De controle hierbij is: 256 + 32 + 16 + 8 + 1 = 313 wat klopt.

Methode 2

Een tweede methode baseert zich op de modulo en de deling. Modulo is de berekening die de rest na de deling teruggeeft. In het binair talstelsel (we gaan immers steeds delen door twee) is de modulo van het deeltal en de deler (twee dus) steeds 1 wanneer het deeltal een oneven getale is en steesd 0 wanneer het deeltal even is. De methode gaat alsvolgt, we starten met het deeltal en noteren de modulo, indien het getal oneven is trekken we er één van af, vervolgens delen we door twee. We herhalen tot het getal nul is en zo vinden we het binair getal in omgekeerde volgorde. Een voorbeeld:

Getal     Rest
313       1     ^
156       0    /|\
78        0     |
39        1     |  AFLEESRICHING.
19        1     |  
9         1     |
4         0     |
2         0     |
1         1     |
0 <- stop 

Het resultaat van deze methode is dus dezelfde als in de vorige methode, dit voorbeeld illustreert echter niet dat het binair getal van onder naar boven afgelezen dient te worden (het is immers een symmetrisch getal). Daarom een tweede voorbeeld.

Getal     Rest
35        1
17        1
8         0
4         0
2         0
1         1
0 <- stop

De binaire representatie van 35(10) is hier dus 100011(2) en NIET 110001(2). Dit klopt want 1 + 2 + 32 = 35.

[bewerken] Negatieve getallen

integer en negatieve getallen

[bewerken] Floating point getallen

Floating point

[bewerken] Binair rekenen


Heckert GNU.png Deze pagina is vrijgegeven onder de GNU Free Documentation License (GFDL) en nog niet onder CC-BY-SA. Klik hier voor meer informatie.

Wilt u deze tekst gebruiken onder de Creative Commons CC-BY-SA licentie?
Klik dan hier om te kijken van welke gebruikers u nog toestemming nodig heeft.

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.
Persoonlijke instellingen