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