Practicum talstelsels

advertisement
Practicum 1ISCN1 (Computersystemen) week 3
binaire getalrepresentaties, binair rekenen
Vul je naam en studienummer in, maak de opgaven, noteer de antwoorden, en lever het resultaat in bij
je docent. Je zal het misschien niet geloven, maar ik heb in vorige jaren soms prima uitwerkingen
gehad zonder studienummer en met een onleesbare naam. Erg jammer voor die student....
Naam
Studentnummer
Het gebruik van het boek en het internet (b.v. via een zoekmachine - Google) bij het vinden van informatie is
nadrukkelijk toegestaan. Je zit niet voor niets achter een computer.
binair optellen
Binair rekenen is eigenlijk heel eenvoudig, want er zijn voor iedere positie maar 2 mogelijke waarden: 0 en 1.
Je hebt natuurlijk wel veel kolommen (voor eenzelfde getal meer dan bij b.v. decimaal), maar ook de
‘overdracht’ tussen twee kolommen is eenvoudig: 0 of 1. Er zijn maar 4 combinaties van de twee binaire
symbolen:
De op te tellen bits
0
0
0
1
1
0
1
1
Het resultaat
0
1
1
0, overdacht 1
Optellen van twee getallen doe je net als bij decimaal, overdracht zet je bovenaan de volgende kolom. Door
die overdracht moet je soms 3 bits bij elkaar optellen, je moet dan 2 keer het bovenstaande tabelletje
toepassen. De pijltjes geven de overdracht aan. Zoals je ziet kan het optellen van twee getallen een som
opleveren die 1 positie meer in beslag neemt.
1
Getal 1
Getal 2
Som
1
1
1
0
0
1
1
1
1
1
0
1
0
1
1
0
1
0
1
0
1
1
0
0
0
Tel nu op de zelfde wijze onderstaande getallen op. Vertaal vervolgens de getallen naar decimaal (mag met
de PC, gebruik run > calc en zet ‘m op scientific) en controleer je berekening.
decimaal
Getal 1
1
0
1
0
1
0
Getal 2
1
1
1
0
0
1
Som
binair aftrekken
Binair aftrekken is (net als bij decimaal) het spiegelbeeld van optellen. Er zijn weer 4 combinaties van de
twee binaire cijfers 0 en 1, en er kan een overdracht (lenen) optreden als je 1 moet aftrekken van 0.
Versie 1.3 - blz 1 van 8
A–B
0
0
1
1
Het resultaat
0
1, leen 1
1
0
0
1
0
1
In de onderstaande tabel wordt ( Getal 1 – Getal 2 ) berekend. De pijlen geven nu aan wat een kolom leent
van de volgende kolom. Dit geleende bitje (bovenste rij) moet dus ook afgetrokken worden (van Getal 1).
-1
Getal 1
Getal 2
Verschil
-1
1
0
0
1
1
1
0
1
1
-1
1
0
0
1
1
0
0
1
1
0
0
0
Maak nu op de zelfde wijze de onderstaande aftrekking.
Getal 1
1
0
1
0
1
0
1
0
Getal 2
0
1
1
1
1
0
0
1
Som
binair vermenigvuldigen
Binair vermenigvuldigen gaat net als decimaal vermenigvuldigen, behalve dat je voor iedere rij niet echt hoeft
te vermenigvuldigen: 1 keer een getal is gewoon dat getal, 0 keer een getal is 0. Dus op iedere rij komt of het
(verschoven) bovenste getal, of niets ( = 0 ). Die getallen tel je op, en zo krijg je het eindresultaat.
1
1
1
0
0
1
1
0
0
1
*
1
0
1
1
0
0
1
0
1
1
0
0
0
0
1
0
1
0
0
0
0
1
0
0
+
1
0
0
0
1
0
0
0
1
0
Doe nu op de zelfde wijze de volgende vermenigvuldiging. Zet ter controle de beide factoren (= de getallen
die je vermenigvuldigt), en het resultaat, om naar decimaal en check of je het goed hebt gedaan.
Versie 1.3 - blz 2 van 8
decimaal
1
0
1
0
1
1
0
1
*
+
2’s complement notatie voor negatieve getallen
Er zijn verschillende mogelijkheden om negatieve getallen weer te geven, maar in de praktijk gebruiken
vrijwel alle hedendaagse computers de 2’s complement notatie. De belangrijkste reden hiervoor is dat je voor
het optellen of aftrekken van binaire getallen niet hoeft te weten of de getallen unsigned (kan alleen 0 of
positief zijn) dan wel in 2’s complement notatie zijn: optellen en aftrekken gaat precies het zelfde. Voor een
computer betekent dit dus dat dezelfde hardware kan worden gebruikt. Dat bespaart ruimte op de chip (en,
tegenwoordig nog belangrijker, warmteontwikkeling op de chip).
Het basis idee van 2’s complement is dat je de binaire getallen in de zelfde volgorde laat staan, maar de
‘splitsing’ niet direct onder 0 maakt, maar halverwege:
unsigned
interpretation
0
1
2
3
4
5
6
7
2’s complement
interpretation
bitjes
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
2
3
-4
-3
-2
-1
Als je de volgorde aanpast zie je dat voor de 2’s complement notatie de bitjes nog steeds in dezelfde
volgorde staan:
Versie 1.3 - blz 3 van 8
unsigned
interpretation
4
5
6
7
0
1
2
3
2’s complement
interpretation
bitjes
1
1
1
1
0
0
0
0
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
-4
-3
-2
-1
0
1
2
3
Om een gegeven binair getal negatief te maken (in 2’s complement notatie) moet je
 Eerste alle bits inverteren (0 wordt 1, 1 wordt 0),
 En dan 1 bij het resultaat optellen.
Als voorbeeld willen we -6 schrijven in 4 bits 2’s complement notatie. De stappen zijn:



Eerst 6 omzetten naar binair, dat moet na vorige week triviaal zijn: 0110 (4 bits).
Dan inverteren: 1001.
Als laatste 0001 er bij optellen, resultaat is 1010.
Reken nu op de zelfde wijze de onderstaande getallen om naar 8-bits 2’s complement notatie.
Decimaal getal
-55
Getal (zonder de -) in
binair notatie
Alle bits inverteren
1 er bij optellen
Decimaal getal
-63
Getal (zonder de -) in
binair notatie
Alle bits inverteren
1 er bij optellen
gebroken getallen
In onze vertrouwde decimale notatie kunnen we behalve niet-negatieve machten van 10 (dus 1, 10, 100,
1000, etc.) ook negatieve machten van 10 uitdrukken (dus 0.1, 0.01, 0.001, etc.) We doen dit door achter de
positie van de eenheden een punt te zetten en daar achter komt dan de positie met gewicht een-tiende,
daarachter de positie met gewicht een-honderdste, enzovoort. In de binaire notatie doen we precies
hetzelfde, alleen werken we (natuurlijk) met negatieve machten van 2. Dus 0b11.11 betekent 2 + 1 + ½ + 1/4
= 3.75. Reken in de volgende tabel de ontbrekende waarden uit:
Versie 1.3 - blz 4 van 8
Decimaal
Binair
101.101
110.011
2.25 ( = 2 ¼)
4.125 ( = 4 1/8 )
In onze decimale notatie gebruiken we nog een truc om te vermijden dat we voor heel grote of heel kleine
getallen heel veel nullen zouden moeten schrijven. In plaats van 10000000000 schrijven we 1e10, en in
plaats van 0.00000000001 schrijven we 1e-10. Deze truc kunnen we bij binaire getallen ook toepassen, het
getal achter de ‘e’ geeft dan (net als bij de decimale notatie) aan hoeveel plaatsen de punt verschoven moet
worden, positief betekent naar rechts schuiven, negatief naar links schuiven. 0b11e11 betekent dus: het
getal 0b11, maar dan met de punt 0b11 (= 3) posities naar rechts geschoven, dus 0b11000. Decimaal is dat
24. Zet de volgende binaire getallen eerst om naar een binaire notatie zonder ‘e’, en dan naar decimaal. De
binaire getallen moet je hier ‘unsigned’ (dus niet 2’s complement) interpreteren.
Binair met ‘e’
Binair zonder ‘e’
decimaal
1e1
10e10
100e100
101e101
Bij de decimale ‘e’ notatie is het de ‘standaard’ dat je er voor zorgt dat er precies één (niet-nul) cijfer voor de
punt staat, en meestal zetten we ten minste 1 decimaal na de komma. Van alle mogelijke schijfwijzen van
50010 ( 50000e-2, 5000e-1, 500, 500e0, 50e1, 5e2, 0.5e3, 0.05e4, etc ) gebruiken we dus standaard 5.0e2.
Je schrijft dus niet 10e0 maar 1.0e1, en niet 0.1 maar 1.0e-1.
Dat doen we bij de binaire e-notatie ook, dus niet 10e10 maar 1e11. Een slimmerik heeft opgemerkt dat het
enige niet-0 getal in het binaire stelsel de 1 is, dus voor de punt staat altijd een 1. Als we een getal in die
notatie (dat heet ‘genormaliseerd’) in een computer op gaan slaan dan kunnen we die 1 dus weglaten, dat
bespaart 1 bitje.
Versie 1.3 - blz 5 van 8
IEEE notatie voor floating-point getallen
Bij het opslaan van ‘floating-point’ getallen in een computer volgens de IEEE standaard (32 bits versie)
worden de volgende regels gebruikt:




Het getal wordt genormaliseerd (1 cijfer voor de punt, en dat cijfer moet een 1 zijn)
De 1 voor de punt (en de punt zelf) worden weggelaten
Het teken van het getal wordt als los bitje opgeslagen (1 voor negatief, 0 voor positief)
Bij de exponent (het getal achter de ‘e’) wordt 127 opgeteld, het resultaat is dan altijd niet-negatief en
kan dus als unsigned getal worden opgeslagen.
 Het formaat waarin de verschillende onderdelen van het getal worden opgeslagen is:
o Eerst het sign bit
o Dan de exponent in 8 bits
o Dan de fractie (mantisse), dus het deel voor de ‘e’, maar zonder de ‘1.’
Als voorbeeld nemen we 3.25 (decimaal). Binair wordt dit 0b11.01. Genormaliseerd wordt dit 0b1.101 met
exponent 1 (decimaal). Het getal is positief, dus het tekenbit is 0. Bij de exponent tellen we 127 op, dan
krijgen we 128. Hiermee kunnen we het bitpatroon voor ons getal samenstellen:
0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0  positief
128 = e+127  e = 1
101  1.101
Zet op dezelfde wijze de aangegeven decimale getallen om naar IEEE notatie.
15.125 :
-0.25 :
En zet het volgende IEEE floating point getal om naar decimaal:
1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1  ....
....  ....
111  ......
Versie 1.3 - blz 6 van 8
raadsels
Bekijk onderstaande som. In welk (regelmatig) talstelsel klopt deze optelling?
13
13
--- +
31
Aangezien het cijfer 3 voorkomt kan het niet het 1,2 of 3 tallig stelsel zijn. Je kan nu gewoon proberen: in het
4-tallig stelsel staat er 7 + 7 = 13, nee dus. In het 5-tallig stelsel staat er 8 + 8 = 16, hoera! Je kan het ook
berekenen: 3 + 3 levert 1 met een carry (overdracht naar de volgende kolom), ofwel 10 (in dat onbekende
stelsel). Als het grondtal N is, dan geldt 11n = N10 + 1. Dus 3 + 3 = N + 1, dus 5 = N.
Bepaal nu zelf in welk talselsel deze soms klopt: 25 + 25 = 53.
onregelmatige stelsels
Overigens zijn er nog veel meer talstelsels denkbaar. Tijd (uren en minuten) worden in feite uitgedrukt in een
60-tallig stelsel, maar we gebruiken dan wel een decimale notatie voor de uren en de minuten. 60
verschillende symbolen onhouden en herkennen is blijkbaar te veel voor een mens. Hoeken worden op een
vergelijkbare manier uitgedrukt in graden (360 in een cirkel), (boog-) minuten (60 in een graad) en (boog-)
seconden (60 in een minuut). Voor hoeken is er een alternatieve notatie in grads: er gaan 400 grads in een
cirkel, en delen van grads worden gewoon aangegeven achter de komma: anderhalve grad is 1.5 grad
(vergelijk: anderhalve graad is 1:30 = 1 graad en 30 minuten).
Hoeveel uren (uitgedrukt als decimaal getal) zitten er in 2:10:30 (dat is 2 uren, 10 minuten en 30 seconden)?
Geef aan hoe je het antwoord berekend. Doe dat overigens ook op je tentamen, zelfs als het eindantwoord
fout is heb je misschien nog kans op een deel van de punten als je methode maar een klein foutje bevat!
Hoeveel grads zitten er in 300 graden en 30 minuten?
Versie 1.3 - blz 7 van 8
Versie 1.3 - blz 8 van 8
Download