Wij, mensen, rekenen in het decimaal stelsel. Computers doen dit niet. Om een computer in het decimale stelsel te laten rekenen zouden computers 10 staten van informatie moeten kennen, helaas kennen ze er maar 2, namelijk 1 of 0. Computers kennen nog een grote beperking, ze kunnen alleen maar optellen. Toch kunnen ze wel het verschil berekenen, verminigvuldigen en delen. In dit hoofdstuk leer je hoe een computer, en straks ook jij, binaire berekeningen kunt uitvoeren.
Om getallen bij elkaar op te tellen hoef moet je een aantal regels volgen. De volgende tabel laat zien wat de mogelijke uitkomsten zijn van de optelacties:
0 | + | 0 | = | 0 | |
1 | + | 0 | = | 1 | |
0 | + | 1 | = | 1 | |
1 | + | 1 | = | 10 | Je schrijft de 0 op en schuift de 1 door naar de volgede positie. |
Als voorbeeld gaan we 1101 en 1111 bij elkaar optellen:
1. Schijf de getallen onder elkaar.
1101 | 1 | 1 | 0 | 1 | ||
1111 | 1 | 1 | 1 | 1 | ||
+ | ||||||
2. Tel de laatste kolom op 1 + 1 = 10; je schrijft de nul op en schuift de 1 door.
1 | ||||||
1101 | 1 | 1 | 0 | 1 | ||
1111 | 1 | 1 | 1 | 1 | ||
+ | ||||||
0 |
4. Tel de volgende kolom op 1 + 1 = 10; onthoud de 0 op en schuif de 1 door, daarna 0 + 1 = 1; schrijf de 1 op.
1 | 1 | 1 | ||||
1101 | 1 | 1 | 0 | 1 | ||
1111 | 1 | 1 | 1 | 1 | ||
+ | ||||||
1 | 0 | 0 |
5. Tel de volgende kolom op 1 + 1 = 10; onthoud de 0 op en schuif de 1 door, daarna 0 + 1 = 1; schrijf de 1 op.
1 | 1 | 1 | 1 | |||
1101 | 1 | 1 | 0 | 1 | ||
1111 | 1 | 1 | 1 | 1 | ||
+ | ||||||
1 | 1 | 1 | 0 | 0 |
Om twee getallen van elkaar af te trekken maakt de computer gebruik van Two's complement methode om negatieve getallen te maken. Aangezien een computer alleen kan optellen moeten we dus eerst een negatief getal maken. Laten we eerst even naar een decimaal voorbeeld kijken. We gaan de volgende berekeing uitvoeren: 11 - 5 = 6 . Hier staat eigelijk (+11) - (+5) = (+6), de plustekens schrijven we alleen nooit op. Deze aftreksom kunnen we ook schrijven als een optelsom. Hievoor moeten we eerst de +5 veranderen in -5. Als je dat doet dan krijg je: (+11) + (-5) = (+6). Nu gaan we dit toepassen in het binaire rekenen.
Laten we als voorbeeld de volgende berekening uitvoeren: 1111 - 101. Eerst maken we van het positieve getal 101 een binair negatieve versie:
We starten hiermee door het getal even lang te maken als het getal waar het het van af wilt trekken, in dit geval een extra 0.
0 | 1 | 0 | 1 |
Daarna maken we van iedere 1 een 0 te maken en omgekeerd:
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
Tot slot tellen we er 1 bij op:
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 0 | 1 | 1 |
Nu hebben we het positieve 101 omgezet in een binair negatieve waarde 1011. Deze waarde kunnen we nu optellen:
1 | ||||
1 | 1 | 1 | 1 | |
1 | 0 | 1 | 1 | |
+ | ||||
0 |
1 | 1 | |||
1 | 1 | 1 | 1 | |
1 | 0 | 1 | 1 | |
+ | ||||
1 | 0 |
1 | 1 | 1 | ||
1 | 1 | 1 | 1 | |
1 | 0 | 1 | 1 | |
+ | ||||
0 | 1 | 0 |
1 | 1 | 1 | 1 | ||
1 | 1 | 1 | 1 | ||
1 | 0 | 1 | 1 | ||
+ | |||||
1 | 1 | 0 | 1 | 0 |
Omdat dit eigelijk een aftreksom maken we vervallen alle voorste tekens tot het reslutaat evenveel tekens heeft dan het langste begin getal. In dit geval vervalt de voorste 1.
1 | 1 | 1 | 1 | |
1 | 0 | 1 | ||
- | ||||
1 | 0 | 1 | 0 |
Nog een voorbeeld:
110100 - 110 = ?
Omzetten naar negatief:
0 | 0 | 0 | 1 | 1 | 0 | Aanvullen |
1 | 1 | 1 | 0 | 0 | 1 | Omkeren |
1 | 1 | 1 | 0 | 1 | 0 | 1 erbij tellen |
Resultaat optellen en voorloop tekens verwijderen tot lengte langste getal:
1 | |||||||
1 | 1 | 0 | 1 | 0 | 0 | ||
1 | 1 | 1 | 0 | 1 | 0 | ||
+ | |||||||
1 | 0 | 1 | 1 | 1 | 0 |
Het antwoord is 110100 - 110 = 101110
Binair vermenigvuldigen is een eenvoudig process. Het is niet meer dan verschuiven en optellen van de factor. Als voorbeeld gaan we de volgende som uitrekenen: 1110 x 1010 = ?
Zet de getallen onder elkaar:
1 | 1 | 1 | 0 | |
1 | 0 | 1 | 0 | |
x |
We starten nu van rechts naar links. Schrijf het bovenste getal over als er 1 staat en allemaal nullen als er een 0 staat. Het laatste teken van 1010 is een 0 dus allemaal nullen.
1 | 1 | 1 | 0 | |
1 | 0 | 1 | 0 | |
x | ||||
0 | 0 | 0 | 0 |
Het voorlaatste teken is een 1 dus schrijven we het getal en omdat we met het voorlaatste getal bezig zijn voegen we één extra nul toe aan het einde:
1 | 1 | 1 | 0 | ||
1 | 0 | 1 | 0 | ||
x | |||||
0 | 0 | 0 | 0 | ||
1 | 1 | 1 | 0 | 0 |
Het volgende getal is weer een 0, dus (vergeet te extra nullen niet):
1 | 1 | 1 | 0 | |||
1 | 0 | 1 | 0 | |||
x | ||||||
0 | 0 | 0 | 0 | |||
1 | 1 | 1 | 0 | 0 | ||
0 | 0 | 0 | 0 | 0 | 0 |
Als laatste hebben we en 1, dus (met 3 extra nullen):
1 | 1 | 1 | 0 | ||||
1 | 0 | 1 | 0 | ||||
x | |||||||
0 | 0 | 0 | 0 | ||||
1 | 1 | 1 | 0 | 0 | |||
0 | 0 | 0 | 0 | 0 | 0 | ||
1 | 1 | 1 | 0 | 0 | 0 | 0 |
Tot slot tellen we alles op:
1 | 1 | |||||||
0 | 0 | 0 | 0 | |||||
1 | 1 | 1 | 0 | 0 | ||||
0 | 0 | 0 | 0 | 0 | 0 | |||
1 | 1 | 1 | 0 | 0 | 0 | 0 | ||
+ | ||||||||
1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
Het antwoord:
1110 x 1010 = 10001100
Delen op een comuter is lastig omdat een computer alleen kan optellen. Om toch te kunnen delen tellen we iedere keer de deler bij zichzelf op tot we het bij het deelgetal zijn. Daarna bepalen we de rest.
We starten met een decimaal voobeeld:
4 | 5 | / | 7 | = | 6r3 |
7 | (1) | ||||
7 | + | (2) | |||
1 | 4 | ||||
7 | + | (3) | |||
2 | 1 | ||||
7 | + | (4) | |||
2 | 8 | ||||
7 | + | (5) | |||
3 | 5 | ||||
7 | + | (6) | |||
4 | 2 |
Nu in binair:
1 | 0 | 1 | 1 | 0 | 1 | / | 1 | 1 | 1 | = | 110 |
1 | 1 | 1 | (1) | ||||||||
1 | 1 | 1 | + | (10) | |||||||
1 | 1 | 1 | 0 | ||||||||
1 | 1 | 1 | + | (11) | |||||||
1 | 0 | 1 | 0 | 1 | |||||||
1 | 1 | 1 | + | (100) | |||||||
1 | 1 | 1 | 0 | 0 | |||||||
1 | 1 | 1 | + | (101) | |||||||
1 | 0 | 0 | 0 | 1 | 1 | ||||||
1 | 1 | 1 | + | (110) | |||||||
1 | 0 | 1 | 0 | 1 | 0 | ||||||
1 | 1 | 1 | + | ||||||||
1 | 1 | 0 | 0 | 0 | 1 | te veel |
En de rest berekenen 101101-101010:
0 | 1 | 0 | 1 | 0 | 1 | 0 | Aanvullen |
1 | 0 | 1 | 0 | 1 | 0 | 1 | Omkeren |
1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 erbij tellen |
Optellen:
1 | 1 | 1 | 1 | 1 | ||||
1 | 0 | 1 | 1 | 0 | 1 | |||
1 | 0 | 1 | 0 | 1 | 1 | 0 | ||
+ | ||||||||
0 | 0 | 0 | 0 | 1 | 1 |
Antwoord:
101101 / 111 = 101 r 11