Talstelsels

advertisement
Talstelsels
Over binaire, decimale en hexadecimale getallen
René Dohmen
1
Inleiding
Dit boek gaat over de manier waarop getallen in een computer worden
vastgelegd. Je hebt vast wel eens gehoord dat computers met enen en nullen
rekenen. Nu leer je hoe getallen met enen en nullen worden opgeschreven.
In het dagelijks leven schrijven we getallen in het tientallig stelsel op. De
notatie met enen en nullen heet binaire notatie.
Je leert hoe je getallen van de ene vorm in de andere vorm kunt omrekenen.
Verder leer je nog hoe een computer getallen optelt, aftrekt en
vermenigvuldigt.
Omdat binaire getallen snel lang worden en daardoor moeilijk leesbaar zijn,
worden getallen regelmatig als hexadecimale geschreven.
Tenslotte leer je hoe je hele grote en hele kleine kommagetallen in een
computer kunt bewaren.
Omdat het boekje in de eerste plaats geschreven is voor leerlingen die het
vak Informatica in de bovenbouw van de havo en het vwo volgen, kom je
soms de toevoeging vwo in de titel tegen als ik de lesstof meer geschikt
vind voor vwo'ers.
2
Inhoudsopgave
1.1
Het decimale talstelsels
2.1
2.2
2.3
2.4
Het binair (tweetalig) talstelsel (bi=2)
Bit en Bytes
Binair naar decimaal
Decimaal naar binair
3.1
3.2
3.3
3.4
Rekenen met binaire getallen: optellen
Negatieve getallen
Negatieve binaire getallen lezen
Rekenen met binaire getallen: aftrekken
4.1
4.2
4.3
4.4
4.5
Het hexadecimaal of zestientallig stelsel
Hexadecimaal (zestientallig) naar tientallig
Tientallig naar hexadecimaal (zestientallig)
Omrekenen van hexadecimaal naar binair
Van hexadecimaal naar binair
5.1
Mogelijke conversies
6.1
6.2
6.3
Binaire getallen vermenigvuldigen: Arithmetic Shift
Optellingen met méér dan twee binaire getallen
Nog sneller vermenigvuldigen
7.1
7.2
Andere talstelsels (VWO)
Opteltabellen (VWO)
8.1
8.2
Zwevende kommagetallen (VWO)
Enkelvoudige en dubbele precisie (VWO)
9.1
Uitwerkingen
10.1
Bijlage
3
1.1
Het decimaal talstelsel
In het tientallig stelsel betekent 123 het volgende:
3  1 (drie eenheden)
2  10 (twee tientallen)
1  100 (1 een honderdtal)
We kunnen dit als volgt opschrijven:
2
1
0
1
2
3

1

1
02


1
03

1
0
Van achter naar voren bekeken komen dus de machten van 10 aan de beurt.
Daarom heet deze manier om getallen te noteren het tientallig of
decimaalstelsel (deci=10). Tien is het grondtal van de machten.
Op elke positie kun je uit tien cijfers kiezen: 0..9.
Opgave 1.1.1
Waarom is 9 het hoogste cijfer op een positie in het decimaal stelsel?
Misschien vind je het vreemd dat 1 geschreven wordt als 100. Bekijk dan de
volgende tabel eens. In de tweede kolom staan machten van 2. Als je een
regel naar beneden gaat wordt de exponent 1 hoger. De uitkomst van de
berekening wordt steeds 2x zo groot. Als je een regel omhoog gaat wordt de
exponent 1 lager. De uitkomst wordt dan 2x zo klein. Als je van 21 een
regel omhoog gaat komt je bij 20 en wordt de waarde dus door twee
gedeeld: 2/2=1.
10=1
11=1
12=1
13=1
14=1
20=1
21=2
22=4
23=8
24=16
30=1
31=3
32=9
33=27
34=81
100=1
101=10
102=100
103=1000
104=10000
4
160=1
161=16
162=256
163=4096
164=65536
2.1 Het binair (tweetalig) talstelsel (bi=2)
In een computer zitten chips. Op die chips zitten heel veel elektronische
schakelaars (transistors). Die schakelaars kunnen open zijn (0) of gesloten
(1). Daarom zeggen we dat computers met nullen en enen rekenen.
Opgave 2.1.1
Is er iets op tegen om de 0 en 1 als volgt aan open en gesloten te
koppelen: openen (1) of gesloten (0)?
5
2.2 Bit en Bytes
Elke positie in het tweetallig stelsel heet een bit. Dat is een samentrekking
van binairy digit (Nederlands: binair getal). Een getal groter dan 1 bestaat
uit meerdere bits. Bit kort je af met de kleine letter b.
Vaak wordt in een computer met groepjes van bits gewerkt. Als het er acht
zijn zeg je op z’n Engels dat ze ‘by eight’ gegroepeerd zijn, dat korten we af
als Byte. Byte kort je weer af met de hoofdletter B.
In het binair talstelsel is elke positie een macht van twee waard. Je kunt op
elke positie dus 0 of 1 invullen.
vooraan/links
16
2
4
achteraan/rechts
8
2
2
4
2
2
2
1
2
1
2
0
In de bovenstaande tabel is plaats voor 5 bits, maar binaire getallen kunnen
natuurlijk ook groter zijn.
Opgave 2.2.1
a Hoeveel verschillende getallen kun je met een byte maken?
b Wat is het kleinste en het grootste getal?
c Hoeveel verschillende getallen kun je met x bits maken?
d Wat is het kleinste en het grootste getal met x bits?
6
2.3 Binair naar decimaal
“Er zijn 10 soorten mensen: Mensen die binair kunnen tellen
en mensen die dat niet kunnen."
101 is een voorbeeld van een binair geschreven getal. Omdat 101 ook een
getal in het tientallig stelsel zou kunnen zijn schrijven we het grondtal van
het talstelsel rechtsonder het getal: 1012
Voorbeeld 1
Wat is de waarde van 1012 ?
2
1 0
1
0
1

1

2

0

2

1

2

1

4

0

2

1

1

4

0

1

5
2
Voorbeeld 2
Hoe schrijf je 1012 in het tientallig stelsel?
100112= 1× 2 4+ 0× 23+ 0× 22+ 1× 21+ 1× 2 0= 16+ 2+ 1= 19
7
De wiskundige Leibniz schreef al over binaire getallen, lang voor er
computers bestonden.
8
9
2.4 Decimaal naar binair
Nu de omgekeerde vraag: hoe kun je een decimaal getal omrekenen naar de
binaire schrijfwijze?
Methode 1
De eerste methode werkt door de grootste macht van twee van het getal af
te trekken. We gaan daarmee door tot we bij nul zijn.
Hiernaast zie je hoe je dat bij het decimale getal 102 doet.
Allereerst is 64 de grootste macht van 2 die ‘past’.
Van wat je over houdt, haal je steeds weer een kleinere macht
van 2 af.
1 : 64 kun je eraf halen
1 : 32 kun je eraf halen
0 : 16 niet
0 : 8 ook niet
1 : 4 wel
1 : 2 ook
0 : 1 niet
Je noteert dit getal als 1100110.
0
Let op: denk eraan dat je doorrekent tot 2 = 1
10
102
64
38
32
6
4
2
2
0
Methode 2
De tweede methode kijkt naar de rest, na deling door 2. Als voorbeeld
bekijken we het getal 35.
We beginnen met 35. 35:2 = 17 rest 1
We gaan verder met 17. 17:2 = 8 rest 1
Dan volgt 8:2 = 4 rest 0
Zo gaan we door tot er nul over blijft.
De restwaarde die je vond vormen in omgekeerde volgorde het binaire
getal.
In de onderstaande tabel is de berekening samengevat.
waarde
Rest na deling door twee
35
1
17
1
8
0
4
0
2
0
1
1
0
Het binaire notatie van 35 is 100011.
11
2.5 Andere groepjes van bits
Er zijn ook namen voor andere groepjes van bits.
Naam
Bitlengte
Nibble
4
Byte
8
Word
16
Double Word 32
Quad Word
64
Een groepje van 4 bits heet een nibble. Een groepje van 16 bits heet een
Word. Een groepjes van 32 bits heet een Double Word. Tegenwoordig
bestaan er zelfs processoren die met 64 bits (een Quad Word) tegelijk
kunnen rekenen.
12
3.1
Rekenen met binaire getallen: optellen
Binaire getallen optellen gaat net zoals met decimale getallen. In het
decimaal stelsel gaat het zo:
23
16 +
Eerst bereken je 3+6. Dat is 9.
23
16 +
9
Dan 2+1=3
23
16 +
39
Als de uitkomst van een berekening groter dan 9 is, onthoud je de tientallen
voor de volgende stap:
58
79 +
8+9=17: 7 opschrijven, 1 onthouden
1
58
79 +
7
13
1+5+7=13, 3 opschrijven, 1 onthouden
11
58
79 +
37
Omdat dit de laatste stap was, schrijven we de onthouden 1 nu ervoor op:
11
58
79 +
137
Het onthouden getal heet in het Engels carry (wat dragen betekent).
Bij binaire getallen gaat het niet anders. Er zijn echter maar 4 optellingen
die je hoeft te kennen:
0+0=0
0+1=1
1+0=1
1+1=10 → 0 opschrijven en 1 onthouden
We proberen het eens:
11
10 +
We berekenen 1+0=1
11
10 +
1
1+1=10, 0 opschrijven, 1 onthouden,. Omdat dit de laatste berekening was,
schrijven we de 1 meteen op.
14
1
11
10
101 +
Je kunt deze berekening in het tientallig stelsel controleren: 113, 102,
3+2=5101. Dus het klopt.
Als je twee getallen bij elkaar telt, kan het gebeuren dat je 3 bits bij elkaar
moet tellen. Er zijn dan 8 mogelijkheden:
0+0+0=0
0+0+1=1
0+1+0=1
0+1+1=10 (=2)
1+0+0=1
1+0+1=10
1+1+0=10
1+1+1=11 (=3)
Als je bij een tussenstap in een optelling 1+1+1 tegenkomt moet je 1
opschrijven én 1 onthouden.
Opgave 3.1.1
Tel de volgende binaire getallen bij elkaar door ze onder elkaar te
schijven. Laat zien hoe je aan je antwoord komt door de carry erboven
te schrijven.
a 100101 + 001100
b 100101 + 011101
c 101110 + 101010
LET OP: de uitkomst van een optelling is soms langer dan de getallen die
opgeteld werden. Als er gegeven is dat getallen in een Byte staan, zijn er
maximaal 8 bits voor de getallen beschikbaar. Een getal van 9 bits past dus
niet meer. Als een getal te lang is spreken we van overflow → het getal past
niet meer. De bits vooraan het getal vallen weg.
15
3.2
Negatieve getallen
Als je negatieve getallen wilt opslaan in een rijtje bits kun je afspreken dat
het eerste bit bepaald of het getal positief of negatief (0 is positief, 1 is
negatief). In zestien bits houdt je dan vijftien bits over om het getal te
schrijven.
Een eerste (niet zo handige) poging:
0000000000000001 = +1
1000000000000001 = -1
Zo een rijtje van zestien bits waarin je zowel positieve als negatieve gehele
getallen kunt bewaren heet een Integer.
Deze manier om negatieve getallen op te slaan wordt echter niet gebruikt,
omdat optellingen met negatieve getallen niet meer zo handig te berekenen
zijn.
Opgave 3.2.1
a Bereken –1 + 1
b Bereken 1000000000000001 + 00000000000000001
c Reken je antwoord van b om naar het decimale stelsel (let op het
eerste bitje!)
Je ziet dat eenvoudig optellen van negatieve en positieve getallen op deze
manier niet gaat.
We gaan nu onderzoeken welke getallen opgeteld wél nul geven.
In decimale notatie zijn –6 en 6 samen 0.
16
Opgave 3.2.2
Maak nu de optellingen die hieronder staan. Het zijn steeds bytes, dus
als je aan de voorkant een carry overhoudt gooi je dat bitje gewoon
weg. Wat valt je op?
00000101
11111011+
00001001
11110111+
00010001
11101111+
00100001
11011111+
01000001
10111111+
Probeer nu de regel te achterhalen waarmee je van een positief getal een
negatief getal maakt.
Opgave 3.2.3
Controleer je regel nu aan de hand van de volgende voorbeelden.
00000100
11111100+
00001000
11111000+
00010000
11110000+
00100001
11100000+
01000001
11000000+
Heb je de regel nu gevonden?
Het recept om van een positief binair getal een negatief binair getal te
maken
Een positief getal (nul vooraan!) kun je negatief maken door alle bits om
te keren (1 wordt 0 en 0 wordt 1) en dan 1 bij de uitkomst op te tellen.
De notatie van negatieve binaire getallen staat bekend als Two's
complement.
In de bijlage vindt je een bewijs van deze regel.
Let op: 11111111 kan dus twee betekenissen hebben als het eerste bit voor
het teken staat is het een negatief getal (-1). Als alle bits voor het getal
gebruikt worden is het positieve getal 255.
Ga er in het algemeen vanuit dat er geen teken in het spel is, tenzij dat
nadrukkelijk vermeld wordt.
17
Opgave 3.2.4
Maak de volgende positieve getallen negatief. Het eerst bit staat voor
het teken.
a 0111000
b 0101010
c 0000111
18
3.3
Negatieve binaire getallen lezen
Hoe lees je gemakkelijk hoeveel 101101 is?
101101  teken apart zetten
1 | 01101  bereken de waarde van het deel voor en achter de streep
(32,13)
Maak het eerste getal negatief en tel ze op: -32 + 13 = -19
Of anders uitgelegd:
De voorste 1 is nu het 6e bit. Normaal is dat 32 waard. Maar omdat het
een teken is tel je het voor –32.
De rest van het getal is 1+4+8 = 13. Samen geeft dat –32 + 13 = -19.
Nog een voorbeeld:
101001  1|01001  -32 + 8 + 1 = -32 + 9 = -23
NB: Als het eerste bit een 0 is bereken je gewoon de waarde alsof er geen
teken voorop staat.
Opgave 3.3.1
Oefen nu met de volgende getallen:
a 10001
b 10011
c 11111
d 11010
e 11011
Opgave 3.3.2
Schrijf de volgende negatieve getallen binair in een Byte
a -20
b -100
19
Wat is nu het grootste en kleinste getal als het eerste bit voor het teken
staat?
Als voorbeeld nemen we een getal van 6 bits, waarvan het eerste bit dus het
teken is.
Het grootste positieve getal is: 011111
Het kleinste negatieve: 100000
Opgave 3.3.3
Ga er bij de onderstaande vragen vanuit dat je te maken hebt met
getallen van 6 bits waarvan het eerste bit voor het teken staat.
a Hoe schrijf je het getal 0?
b Hoe schrijf je het getal -1?
20
Intermezzo
Negatieve binaire getallen in de rekenmachine van Windows
Als je een positief binair getal met min één vermenigvuldigd
krijgt je een binair getal dat 64 bits lang is. Dat komt doordat de
rekenmachine altijd met getallen van 64 bits rekent. Je kunt de
rekenmachine van Windows dus niet gebruiken om opgaven met
negatieve getallen te controleren!
21
3.4
Rekenen met binaire getallen: aftrekken
Minsommen kun je zien als optellen met een negatief getal.
100 – 50 = 50
100 + (-50) = 50
Als je met binaire getallen minsommen wilt maken kan dat op de volgende
manier:
8 – 2 = 8 + (-2) = 6
Binair schrijf je dit als:
01000 – 00010 = 01000 + 11110 = 00110
Let op: bij de laatste berekening treedt wel een overflow op!
22
4.1
Het hexadecimaal of zestientallig stelsel
In het hexadecimaal (hexa=6, deci=10) of zestientalligstelsel is elke positie
een macht van 16 waard.
vooraan
163
4096
2
16
256
16
16
1
achteraan
160
1
Op elke positie kun je kiezen uit 16 waarde. We hebben echter maar 10
cijfers (0 t/m 9). Voor de waarde 10 t/m 15 moeten we dus een nieuw
‘cijfer’ bedenken. Ooit heeft men er voor gekozen om hier voor de
hoofdletters A t/m F te gebruiken. De cijfers in het zestientallig stelsel zijn
dus 0..9 en daarna A t/m F.
De volgende getallen kunnen dus getallen in het zestientallig stelsel zijn:
123 ABC 9AB
Omdat 123 ook als decimaal getal te lezen is kun je weer duidelijk maken
dat het hexadecimaal is door 16 rechtsonder in subscript te schrijven:
12316 .
4.2 Hexadecimaal (zestientallig) naar tientallig
Hoe reken je deze getallen naar het tientalligstelsel om?
2 1 0
1
2
3

1

1
6

2

1
6

3

1
6

1

2
5
6

2

1
6

3

1

2
5
6

3
2

3

2
9
1
1
6
2 1 0
A
B
C

A

1
6

B

1
6

C

1
6

1
0

2
5
6

1
1

1
6

1
2

1

2
5
6
0

1
7
6

1
2

2
7
4
1
6
2
1
0
9
A
B

9

1
6

A

1
6

B

1
6

9

2
5
6

1
0

1
6

1
1

1

2
4
7
5
1
6
Opgave 4.2.1
Bedenk zelf 3 getallen in hexadecimale notatie en reken ze naar de
decimale notatie om.
23
24
4.3 Tientallig naar hexadecimaal (zestientallig)
Ook de omrekening van het tientallig naar het zestientallig stelsel moet je
kunnen maken. Bijvoorbeeld: hoeveel is 234510 in het zestientallig stelsel is.
We schrijven zo een opdracht als volgt op:
234510 = …16
Net als bij de omrekening van decimaal naar binair zoeken we de hoogste
macht die in het getal past. Van decimaal naar binair zoeken we de hoogste
macht van twee. Bij de omrekening van decimaal naar hexadecimaal zoeken
we de hoogste macht van 16.
De eerste machten van 16 vermelden we eerst nog even als
geheugensteuntje:
160 =1 161 = 16
162 = 256 163 = 4096
Let er op dat een macht nu meer dan 1 keer kan passen (maximaal 15=F
keer).
9  256=
2  16=
9  1=
2345
2304
41
32
9
9
0
Dus 234510 = 92916
11  256=
5  16=
2  1=
2898
2816
82
80
2
2
0
25
De 11 schrijf je op als B, dus 289810 = B5216
Opgave 4.3.1
Waarom kun je in plaats van B52 niet 1152 schrijven?
Opgave 4.3.2
Bedenk zelf 3 getallen in decimale notatie en reken ze naar
hexadecimale notatie om.
26
4.4
Omrekenen van hexadecimaal naar binair
Als je wilt omrekenen van hexadecimaal naar binair kan dat door eerst om
te rekenen naar het decimaal stelsel. Dat kan je al, maar het is ook veel
werk.
Voorbeeld
opgave
Reken AB16 om naar het binaire stelsel.
uitwerking
Eerst reken we AB16 om naar het tientallig talstelsel.
AB16= 10× 16+ 11× 1= 17110
Nu rekenen we 171 om naar het tweetallig talstelsel.
171
128
43
32
11
8
3
2
1
1
0
-
Dat geeft 10101011.
Er is echter een hele snelle methode!
27
Daarvoor moet je echter de volgende tabel van buiten kennen (of snel op
kunnen schrijven):
decimaal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
binair
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
hexadecimaal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
28
Stel nu dat je het volgende binaire getal naar het hexadecimaal stelsel wordt
omzetten:
110110101011010
Je gaat dan als volgt te werk:
stap 1
Maar van achter groepjes van 4 bits (nibbles!):
110 | 1101 | 0101 | 1010
Stap 2
Vul (als dat nodig is het voorste groepje met nullen aan tot 4 bits)
0110 | 1101| 0101 | 1010
stap 3
Zoek nu in de tabel de hexadecimale waarde bij elke nibble.
6D5A
klaar!
4.5 Van hexadecimaal naar binair
Je kunt de tabel ook gebruiken om snel van hexadecimaal naar binair om te
rekenen (zonder de tussenstap via het decimaal stelsel).
Je werkt dan in omgekeerde richting.
Neem het getal ABC. Zoek voor de cijfer A, B en C de binaire code op en
schrijf deze (in dezelfde volgorde) achter elkaar: 1010 1011 1100
Denk er aan dat je steeds 4 bits moet opschrijven, dus 11 wordt 0011!
29
5.1 Mogelijke conversies
Je kent nu de volgende talstelsels: binair, decimaal en hexadecimaal. Je hebt
gezien hoe je van het ene naar het andere talstelsel om moet rekenen. Met
een mooi woord heet dan omrekenen converteren.
Omreken heeft alleen zin als je naar een ander talstelsel omrekent.
De zes mogelijke - zinnige – omrekeningen staan in de onderstaande tabel
opgesomd.
Van → naar
Binair
Binair
Decimaal
x
Hexadecimaal
x
Decimaal
Hexadecimaal
x
x
x
x
Opgave 5.1.1
Bedenk voor elk van de zes mogelijke omrekeningen drie opgaven en
werk deze uit.
30
6.1 Binaire getallen vermenigvuldigen:
Arithmetic Shift
Als je in het tweetalig stelsel een vermenigvuldiging maakt, doe je eigenlijk
hetzelfde als in het decimaal stelsel.
Je schrijft de getallen onder elkaar en past het recept toe dat je op de
basisschool geleerd hebt.
123
456x
Je begint dus met de vermenigvuldiging 6x3, daarna 6x2 etc.
Om al deze vermenigvuldigen gemakkelijk te kunnen maken moet je de
tafeltjes van 10 van buiten kennen.
In het tweetallig stelsel werkt het net zo:
1101
101x
Je begint met 1x1, daarna 1x0 etc.
De vermenigvuldigen die voor kunnen komen zijn echter heel erg beperkt:
0x0=0
0x1=0
1x0=0
1x1=1
Je hoeft dus alleen maar de tafeltjes van nul en één te kennen!
31
Als je dat bij de bovenstaande vermenigvuldiging uitvoert krijg je het
volgende (De drie tussenresultaten tel je bij elkaar):
1101
101x
1101
0
110100+
1000001
Hieronder staat een vermenigvuldiging die er veel op lijkt uitgewerkt.
1101
111x
1101
11010
110100+
1011011
Als je naar de drie tussenresultaten kijkt, valt je misschien iets op. Bij de
vermenigvuldigingen met 1 komt er telkens 1101 uit, achteraan aangevuld
met nullen.
1101
111x
1101
11010
110100+
1011011
1101 is het eerste getal uit de vermenigvuldig!
Kortom, om de tussenresultaten te krijgen hoef je niet eens alle
vermenigvuldigingen te maken!
Je hoeft alleen het eerste getal naar links te schuiven (het Engelse woord
voor schuiven is to shift) en achteraan aan te vullen met nullen. Bij het
eerste getal van rechts, nul nullen. Bij het tweede getal van rechts één nul,
bij het derde getal van rechts twee nullen.
In het algemeen dus bij het n-de getal van rechts, n-1 nullen.
32
Het goede nieuws is dus dat een microprocessor maar twee dingen hoeft te
kunnen om te vermenigvuldigen: binaire getallen verschuiven en binaire
getallen optellen. Als je dat die bewerkingen op de juiste manier combineert
kun je ook vermenigvuldigen.
Deze methode heet arithmetic shift.
Opgave 6.1.1
Maak de volgende vermenigvuldig met arithmetic shift (zet de
getallen onder elkaar).
1101
1010x
33
6.2 Optellingen met méér dan twee binaire getallen
Let op bij het optellen van de tussenresultaten moet je soms heel veel
getallen (veel regels) bij elkaar tellen.
Als je drie tussenresultaten hebt moet je maximaal 3 énen + 1 voor de carry
= 4 énen bij elkaar tellen. Hoe moet je dat doen?
Methode 1
We bekijken 111+1110+11100:
1
111
1110
11100+
01
In de derde optelling bereken je 1+1+1+1=410=1002.
Je moet de laatste nul opschrijven, maar 10 (=210) onthouden.
21
111
1110
11100+
001
In deze stap maken we dus de optelling 2+1+1=410=1002.
We schrijven dus wederom 0 op en onthouden 10 (=210).
221
111
1110
11100+
0001
34
In de laatste stap tellen we 2 en 1 bij elkaar: 2+1=310=112.
We schrijven 1 op en onthouden 1.
1221
111
1110
11100+
110001
Kortom. Er moeten soms meer dan 1 onthouden, maar het is niet essentieel
anders dan met eenvoudige optelling.
Methode 2
Je kunt de optelling ook op een andere manier bekijken. We gaan verder op
het punt dat de derde optelling gemaakt wordt:
1
111
1110
11100+
01
1+1+1+1 = 100. We schrijven 0 op en onthouden 10.
10
1
111
1110
11100+
110001
35
We gaan dan verder met de vierde optelling.
Bij die optelling komt een carry om de hoek kijken.
1
10
1
111
1110
11100+
110001
NB: Optellen met getallen waarvan het eerste bit het teken is gaat
precies hetzelfde.
Opgave 6.2.1
Bedenk een vermenigvuldiging van twee binaire getallen van elk 4
bits en voer de berekening uit.
6.3 Nog sneller vermenigvuldigen (extra)
Deze paragraaf is geen onderdeel van de toetsstof.
Je kunt nu als snel vermenigvuldigen door optellen en verschuiven te
combineren. Het kan echter nog veel sneller.
Meer kun je daarover lezen op internet:
http://en.wikipedia.org/wiki/Booth's_multiplication_algorithm
De essentie is dat je lange reeksen enen kunt afkorten.
Als je het
getal M wilt vermenigvuldigen met 00111110 is dat dus
M × (26 + 25+ 24 + 23+ 22+ 21 ) . Je kunt dat sneller berekenen met
M × (27 − 21 ) . Een reeks van n opeenvolgende enen kan dus worden
vervangen door één optelling én één minsom.
36
7.1 Andere talstelsels (VWO)
Wie zegt dat Marsmannetjes niet bestaan? Bij onze laatste ontmoeting bleek
dat zij mathematisch uitstekend onderlegd zijn. Maar voordat ik dat
begrepen had, heb ik heel wat moeten puzzelen…
De tekens waarmee zij hun getallen weergeven, komen in niets overeen met
onze cijfers. De volgende tekens bleken de Martiaanse cijfers te zijn. Hun
aardse waarde staat ervoor:
Aarde
0
1
2
3
Mars





Meer tekens gebruiken Marsmannetjes niet.
Opgave 7.1.1
a
Welke talstelsel gebruikt men op Mars?
b
Wat is de aardse, decimale waarde van het volgende
Martiaanse getal: 
Kies uit de volgende alternatieven:
B 25
C 18
D 212
c
Tel de Martiaanse getallen op, die hieronder staan. Noteer
de uitkomst in het Martiaans.




 
+
37
7.2 Opteltabellen (VWO)
Op deze website kun je een mooie applet vinden waarmee je opteltabellen
kunt maken voor verschillende talstelsels:
http://www.cut-the-knot.org/blue/SysTable.shtml
Opgave 7.2.1
a
Bekijk de opteltabel voor het binaire en het decimale stelsel.
Welke symmetrie zie je in de tabel?
b
Probeer nu zonder te spieken de tabel te maken voor het 3, 5
en 7-talligstelsel.
c
Waarom kun je bij dit applet 'maar' tot het 36-tallig talstelsel
gaan?
38
8.1 Zwevende kommagetallen (VWO)
Wetenschappelijke notatie
Van de wiskunde- en natuurkundelessen ken je de wetenschappelijke
notatie.
Getallen worden genoteerd met machten van 10.
Voorbeelden
12345= 1,2345⋅ 10 4
3,1415= 3,1415⋅ 100
0,0098= 9,8⋅ 10− 3
Een getal kan feitelijk meer dan één manier in wetenschappelijke notatie
geschreven worden.
12345= 1,2345⋅ 10 4
12345= 12,345⋅ 10 3
12345= 0,012345⋅ 106
We kiezen er echter voor om altijd maar 1 getal (geen nul!) voor de komma
te schrijven.
Opgave 8.1.1
Schrijf de volgende getallen in wetenschappelijke notatie
213,978
10000
0,031415
Een getal heeft in de wetenschappelijk notatie dus altijd de vorm:
m⋅ 10 e
m heet de mantisse
10 is het grondtal
39
e is de exponent
Opgave 8.1.2
Geef de mantisse en de exponent van de volgende getallen. Let op:
schrijf het getal eerst in wetenschappelijke notatie.
− 78,374
10001
0,00857
40
zwevende komma notatie
In een CPU zijn er ook registers waarin getallen in een soort
wetenschappelijke notatie bewaard kunnen worden.
Omdat een computer binair rekent is het grondtal 2, in plaats van 10.
Voorbeeld
101⋅ 2 10
Je kunt dit decimaal schrijven als
5⋅ 2 2= 5⋅ 4= 20
We zeggen dat een getal nu genoteerd is in zwevende komma notatie
(Engels: floating point).
De mantisse is bij zwevende kommagetallen juist geen kommagetal.
Opgave 8.1.3
Geef de mantisse en de exponent van de volgende getallen in binaire
zwevende komma-notatie.
− 1010⋅ 210
111⋅ 2 11
10101⋅ 2 1101
41
8.2 Enkelvoudige en dubbele precisie (VWO)
Er zijn internationale afspraken over hoe een zwevend kommagetal in een
register opgeslagen wordt. Deze zijn vastgelegd in IEEE 754.
Er zijn twee vormen:
naam
Nauwkeurigheid/ lengte Teken Exponent Mantisse
precisie
(bits) (bits) (bits)
(bits)
Single
enkelvoudig
Double dubbel
32
1
8
23
64
1
11
52
We bekijken dat wat preciezer voor een Single.
1 bit wordt voor het teken gebruikt; 1 staat daarbij voor negatief, 0
voor positief.
Daarna staat de exponent waar 127 bij geteld is. -10 wordt dus
opgeslagen als -10+127 = +117. Maar dan wel als binair getal.
Dan zijn er nog 23 bits over voor de mantisse.
Voorbeeld
We schrijven het volgend getal als binaire zwevende kommagetal.
7⋅ 23= 111⋅ 211
Het is een positief getal, dus staat er bij het teken een 0.
De exponent is 3. Dat slaan we op als 3+127=130. Binair is dat 128+2
→ 100000010.
Dit zijn al 8 bits, daarom hoeven we niet met nullen aan te vullen aan
de voorkant .
De mantisse is binair 111. Dat vullen we aan de voorkant met 20
nullen aan tot er 23 bits zijn.
Deze drie onderdelen schrijf je in deze volgorde achter elkaar
42
teken | exponent | mantisse
decimaal
binaire
single
7⋅ 23
111⋅ 2 11
0 | 10000010 | 00000000000000000000111
In de uitwerking staan streepjes | tussen de delen van het zwevend
kommagetal. In een microprocessor (CPU) staan die er natuurlijk niet
tussen.
Bij doubles wordt er 211 = 2048 bij de exponent geteld.
Opgave 8.2.1
Schrijf de volgende getallen als 32bits single IEEE 754.
123⋅ 2 21
4,56⋅ 2− 10 (hint: maak van de mantisse eerst een geheel getal)
− 978⋅ 2− 100
43
9.1
Uitwerkingen
Opgave 1.1.1
10 telt voor één op de volgende positie.
Bijvoorbeeld: tien keer een eenheid is precies één keer een tiental:
10× 1= 1× 10
n
n+ 1
Hetzelfde geldt voor hogere machten: 10× 10 = 1× 10
Bovendien bestaat het getal 10 uit twee cijfers, waardoor niet meer duidelijk
is wat met 1010 bedoeld wordt: duizend-tien, of tien tientallen plus tien
eenheden (=110)
Opgave 2.1.1
Het maakt helemaal niets uit of je 0 koppelt aan open en 1 aan gesloten of
omgekeerd.
Opgave 2.2.1
2× 2× 2× 2× 2× 2× 2× 2= 28= 256
a
b
kleinste: 00000000 2= 010 , grootste 111111112= 25510
x
2 verschillende getallen
c
x
d
kleinste: 0 , grootste 2
Opgave 3.1.1
Tel de volgende binaire getallen bij elkaar door ze onder elkaar te schijven.
Laat zien hoe je aan je antwoord komt.
a
b
c
100101 + 001100
100101 + 011101
101110 + 101010
Opgave 3.2.1
a Bereken –1 + 1
b Bereken 1000000000000001 + 00000000000000001
44
c Reken je antwoord van b om naar het decimale stelsel (let op het
eerste bitje!)
Opgave 3.2.2
Maak nu de optellingen die hieronder staan. Het zijn steeds bytes, dus als je
aan de voorkant een carry overhoudt gooi je dat bitje gewoon weg. Wat valt
je op?
00000101
11111011+
00001001
11110111+
00010001
11101111+
00100001
11011111+
01000001
10111111+
er komt steeds nul uit (met een carry helemaal links)
Opgave 3.2.3
Controleer je regel nu aan de hand van de volgende voorbeelden.
00000100
11111100+
00001000
11111000+
00010000
11110000+
00100001
11100000+
01000001
11000000+
Opgave 3.2.4
Maak de volgende positieve getallen negatief. Het eerst bit staat voor het
teken.
a
b
c
0111000 → 1000111+1 → 1001000
0101010 → 1010101+1 → 1010110
0000111 → 1111000+1 → 1111001
Opgave 3.3.1
Oefen nu met de volgende getallen:
a
b
c
d
e
10001 → -16 + 1 = -15
10011 → -16 + 3 = -13
11111 → -16+15 = -1
11010 → -16 + 10 = -6
11011 → -16 + 11 = -5
45
Opgave 3.3.2
Schrijf de volgende negatieve getallen binair in een Byte
Het eerste bit tel je negatief:
a
b
-20 → -128+64+32+8+4 → 11101100
-100 → -128+16+8+4 → 10011100
Opgave 3.3.3
Ga er bij de onderstaande vragen vanuit dat je te maken hebt met getallen
van 6 bits waarvan het eerste bit voor het teken staat.
a
b
Hoe schrijf je het getal 0? → 000000
Hoe schrijf je het getal -1? → 111111
Het eerste bit telt negatief -32+16+8+4+2+1 = -1
Opgave 4.2.1
Bedenk zelf 3 getallen in hexadecimale notatie en reken ze naar de decimale
notatie om.
Opgave 4.3.1
Waarom kun je in plaats van B52 niet 1152 schrijven?
1152 wordt gelezen als 1x4096+1x256+5x16+2x1 en dat is niet gelijk aan
11x256+5x16+2x1
Opgave 4.3.2
Bedenk zelf 3 getallen in decimale notatie en reken ze naar hexadecimale
notatie om.
46
Opgave 5.1.1
Bedenk voor elk van de zes mogelijke omrekeningen drie opgaven en werk
deze uit.
Opgave 6.1.1
Maak de volgende vermenigvuldig met arithmetic shift (zet de getallen
onder elkaar).
1101
1010x
11010
0
110100+
1001110
Opgave 6.2.1
Bedenk een vermenigvuldiging van twee binaire getallen van elk 4 bits en
voer de berekening uit.
Opgave 7.1.1
a
Marsmannetjes tellen viertallig.
b
2
Het is 1214= 1× 4 + 2× 4+ 1× 1= 16+ 8+ 1= 2510 , dus antwoord B
c
Tel de Martiaanse getallen op, die hieronder staan. Noteer de uitkomst
in het Martiaans.
10
32+
102
Opgave 7.2.1
a
Bekijk de opteltabel voor het binaire en het decimale stelsel. Welke
symmetrie zie je in de tabel?
b
Probeer nu zonder te spieken de tabel te maken voor het 3, 5 en 7talligstelsel.
C
47
Opgave 8.1.1
Schrijf de volgende getallen in wetenschappelijke notatie
213,978 → 2,13978⋅ 10 2
10000 →
1,0⋅ 10 4
0,031415 → 3,1415⋅ 10− 2
Opgave 8.1.2
Geef de mantisse en de exponent van de volgende getallen. Let op: schrijf
het getal eerst in wetenschappelijke notatie.
− 78,374 → − 78,374 → m=-7,8374, e=1
10001 → 1,0001⋅ 10 4 → m=1,0001, e=4
0,00857 → 8,57⋅ 10− 3 → m=8,57, e=-3
Opgave 8.1.3
Geef de mantisse en de exponent van de volgende getallen in binaire
zwevende komma-notatie.
− 1010⋅ 210 → m=-1010, e=10
111⋅ 2 11 → m=111, e=11
10101⋅ 2 1101 → m=10101, e=1101
Opgave 8.2.1
Schrijf de volgende getallen als 32bits single IEEE 754.
schrijf achter elkaar: teken | mantisse | exponent+127
123⋅ 2 21 → 0 | 10001011 | 00000000000000001111001
4,56⋅ 2− 10 (hint: maak van de mantisse eerst een geheel getal)
Deze opgave is ingewikkeld! Je denkt misschien dat de oplossing ligt in
456* 2^-10. Maar dat getal is 100 keer te groot. Honderd is niet te schrijven
als macht van twee met een geheel getal als exponent.
48
4,56⋅ 2− 10= 4,56/1024= 0,004453125 Als we dit maar vaak genoeg met
twee vermenigvuldig wordt dit een getal net veel cijfers voor de komma.
Stel dat we 100 keer met twee vermenigvuldigeden dan is het getal dus
2^100 keer te groot. Daarom met we het met 2^-100 vermenigvuldigen om
weer de juiste waarde te krijgen. Je krijgt in principe de nauwkeurigste
waarde door zo vaak mogelijk met 2 te vermenigvuldigen, maar de mantisse
moet nog in 23 bits passen en de exponent+127 in 8 bits.
Stel dat we 0,004453125 met 1024*1024 vermenigvuldigen dan krijgen we:
4669,44*2^-20 dan ronden we af tot 4669*2^-20 dat is wel als single te
schrijven (met een lagere exponent wordt het getal nog nauwkeuriger).
0 | 01101011 | 00000000001001000111101
Nu kun je in principe elk getal als single schrijven. Probeer 1,23456 eens!
− 978⋅ 2− 100 1 | 00011011 | 00000000000001111010010
49
10.1
Bijlage
Deze bijlage is alleen een (veel te ingewikkeld) antwoord op een vraag van
Sidney in 2010. Deze bijlage is geen onderdeel van de toetsstof.
Een bewijs van de de two's complement-regel
Een willekeurige binair getal kan worden geschreven als:
x n− 1 x n− 2 x n− 3 ... x 0
x n− 1 , x n− 2 , …, x 0 staan daarbij elk voor een binair getal: een bit.
n− 1
De waarde van x n− 1 x n− 2 x n− 3 ... x 0 is
∑ 2i x i .
i= 0
Het omgekeerde van een bit of reeks bits noteren we door een streep
erboven te zetten. Bijvoorbeeld:
0= 1,1= 0, 10101= 01010
n− 1
De waarde van x n− 1 x n− 2 x n− 3 ... x 0 is als volgt te berekenen:
∑ 2i x i .
i= 0
Om het two's complement te maken draaien we alle bits om en tellen er één
bij. Voor de waarde telt het linkse bit negatief.
n− 2
n− 1
i
We kunnen de waarde dus als volgt noteren: − 2 x n− 1+ 1+ ∑ 2 x i .
i= 0
merk nu op dat het omgekeerde van één bit genoteerd kan worden als:
x= 1− x .
Als x= 0 geeft dat x= 0= 1− 0= 1 . Controleer dit zelf voor x= 1 .
Dit vullen we in de formule voor de waarde van het two's complement in:
50
n− 2
− 2n− 1 (1− x n− 1)+ 1+ ∑ 2i (1− x i)
i= 0
Hieruit werken we de haakjes weg:
n− 2
n− 2
n− 2
i= 0
i= 0
i=0
− 2n− 1+ 2n− 1 x n− 1+ 1+ ∑ 2 i− 2 i xi = − 2n − 1+ 2n − 1 x n− 1+ 1+ ∑ 2i− ∑ 2i x i
n− 2
We weten echter dat
2i= 2n− 1− 1 ,
∑
i= 0
zodat
n− 2
− 2n− 1+ 2n− 1 x n− 1+ 1+ 2n − 1− 1− ∑ 2i x i .
i= 0
Als we hierin gelijke termen tegen elkaar laten wegvallen krijgen we
n− 2
2
n− 1
x n− 1− ∑ 2i x i .
i= 0
Als we nu een minteken buiten haken halen krijgen we precies:
n− 2
− (− 2n − 1 x n− 1+ ∑ 2i x i ) . Dit is de negatieve waarde van
i= 0
n− 2
− 2n− 1 x n− 1+ ∑ 2i x i . In deze laatste formule staat de waarde van een binair
i=0
getal met teken. Voor een positief getal is x n− 1= 0 , en valt de eerste term dus
weg. Voor een negatief getal ( x n− 1= 1 ) staat hier precies de regel die bij het lezen
van negatieve getallen beschreven werd: tel het linkse bit negatief en de rest
positief.
Kortom: we hebben nu voor een willekeurige bitrij bewezen dat het two's
complement de negatieve waarde heeft van die bitrij.
51
Download