Binair en hexadecimaal rekenen

Binair en hexadecimaal rekenen

In de digitale wereld rekent men met binaire getallen en getal-reeksen. Dit komt omdat het veel gemakkelijker is voor hardware (elektronica) om met het binaire talstelsel te werken dan met het tientallig talstelsel. Een getal wordt opgevat als een reeks enen en nullen. Hiermee verwant is het hexadecimale stelsel, dat voor grote getallen makkelijker leesbaar is. In dit artikel wordt uitgelegd wat deze stelsels precies zijn, en hoe ermee te rekenen valt.

Hoe kunnen we elektronica (hardware) laten rekenen?

Sommige mensen denken wel eens dat de software op hun PC alles uitrekent. Deze gedachte is niet juist; uiteindelijk is het de elektronica die continu aan het rekenen is. De software bevat alleen maar instructie's voor de elektronica om handelingen uit te voeren, zoals vermenigvuldigen, optellen etc...
Hoe kan men elektronische componenten maken die rekenen kunnen? Op het eerste gezicht is dit een bijna onoplosbaar probleem, want dit zou betekenen dat we schakelingen moeten verzinnen die willekeurige rekensommen (vermenigvuldigen, machtverheffen, optellen, worteltrekken, etc....) in stroom of spanning (dit zijn de grootheden die we kunnen meten in elektronische componenten) een antwoord op de rekensom geven.
De oplossing voor dit probleem is dat men getallen zoals wij ze kennen (uit ons tientallige stelsel) eerst omzet naar getallen uitgedrukt in een binair stelsel. Elk mogelijk getal dat wij kennen of nodig hebben kunnen we ook schrijven als een rij 'nullen en enen', in plaats van de cijfers 0 tot en met 9 te gebruiken.
Nu is het eenvoudiger voor elektronica om rekensommen uit voeren op zo'n rij 'nullen en enen'. Grof gezegd vat men een hoge spanning (in de buurt van 5 Volt of 3,3 Volt) op als een '1', en een lage spanning (in de buurt van 0 Volt) op als een '0'. Men heeft allerlei schakelingen bedacht die kunnen vermenigvuldigen, machtverheffen, optellen, worteltrekken, etc.... met nullen en enen. Onderaan dit artikel staat een uitleg over zo'n schakeling: de binaire opteller. Er moeten nog steeds bepaalde problemen worden opgelost, maar deze zijn veel eenvoudiger op te lossen dan de problemen van het moeten rekenen met het tientallig stelsel. Wanneer de elektronica (hardware) klaar is met een rekensom, zet men de uitkomst weer om in een getal uitgedruk in het tientalig stelsel.
Het mooie van elektronica (hardware) is, dat het met een ongelooflijk hoge snelheid al deze berekeningen kan uitvoeren. Voor de gebruiker van een computer is dit heel erg fijn en nuttig, want we willen graag dat de computer ons helpt en taken van ons overneemt. De berekeningen gaan allemaal zo snel dat het voor de computer-gebruiker eigenlijk 'onzichtbaar' op de achtergrond gebeurt.



Binair getal

Een binair getalstelsel is een representatie-systeem van getallen, waarbij het getal 2 als grondtal gebruikt wordt. Dit in tegenstelling tot onze 'gewone' talstelsel, dat het getal 10 als grondtal heeft. Zo kunnen we het getal 356 ontleden in:
356 = 3 x 100 + 5 x 10 + 6 x 1 = 3 x 10² + 5 x 10¹ + 6 x 10°
Dit wordt het decimale talstelsel genoemd.

Een binair getal heeft een soortgelijke representatie, maar nu met 2 als grondtal. Het getal 6 wordt binair voorgesteld als:
6 = 1 x 4 + 1 x 2 + 0 x 1 = 1 x 2² + 1 x 2¹ + 0 x 2° = 110
De plaats waar door een '0' of '1' een waarde wordt aangegeven, noemt men bit (binary digit). Het bit dat uiterst rechts staat, geeft het getal 2° (=1) aan; het wordt least significant bit (lsb) genoemd. Het bit dat uiterst links staat, noemt men het most significant bit (msb).

Op deze wijze kunnen we de getallen 0 t/m 15 representeren:
0 - 0000
1 - 0001
2 - 0010
3 - 0011
4 - 0100
5 - 0101
...........
14 - 1110
15 - 1111

Dit is slechts één manier om getallen binair weer te geven. De bovenstaande code wordt ook wel straight binary genoemd. Er zijn ook andere coderingen mogelijk. Zo biedt de two's complement code de mogelijkheid om ook negatieve getallen te representeren. De BCD (binary code decimal) code is een tussenvorm tussen binair en decimaal. De gray code is een systeem dat voor opeenvolgende getallen altijd maar een bit verandert; het wordt gebruikt voor het bewaken van de nauwkeurigheid bij bitfouten.

Optellen
Binair optellen werkt hetzelfde als decimaal optellen, waarbij we de volgende regels in acht moeten nemem:
0 + 0 = 0
0 + 1 = 1
1 + 1 = 10
Sommeren we twee binaire getallen, dan beginnen we met het optellen van de twee least significant bits. Is de uitkomst van de som 10, dan plaatsen we een '0' in de uitkomst-lsb en een '1' geven we door naar het volgende bit:
v
01
01
--- +
10
De decimale optelling 5+6=11 komt neer op:
v
0101
0110
------ +
1011
De 'v' markeert de plek waar een '1' doorgegeven wordt. Ingenieurs noemen dit de 'carry'. Aftrekken is hetzelfde als optellen van een negatief getal. Voor het weergeven van negatieve getallen gebruikt men de two's complement code. Dezelfde rekenregels blijven gehandhaafd, maar we laten dit hier verder buiten beschouwing.

Vermenigvuldigen
In het vermenigvuldigen van een binair getal kan men eenvoudig inzicht krijgen, door eerst te kijken naar vermenigvuldiging met een getal dat een macht van 2 is. Een vermenigvuldiging met het getal 2 komt neer op het verchuiven van alle bits één postitie naar links. Op de vrijgekomen positie uiterst rechts zetten we een '0':
0101
0010
------ x
1010
Omdat 4 = 2², komt vermenigvuldigen met het getal 4 neer op een verschuiving naar links van 2 positie's, en vermenigvuldigen met 8 (= 2³) op een verschuiving van 3 positie's. Van dit een principe wordt gebruik gemaakt voor andere getallen (die allemaal als machten van 2 te schrijven zijn).

De binaire vermenigvuldiging en optelling wordt in hardware uitgevoerd door logische circuits. Zo'n circuit heeft 2 input-signalen van een zekere bitbreedte, en een output-signaal. Een binaire opteller of vermenigvuldiger (Arithmetic Logic Unit of ALU) bestaat uit een configuratie van logische poorten zoals AND, NAND, OR, NOR, and XOR.


Hexadecimaal

Ingenieurs willen snel kunnen zien wat de waarde van een bepaald getal is, of hoe groot een getal ongeveer is. Daarom gebruikt men in de digitale techniek ook vaak het hexadecimale stelsel. Dit stelsel heeft het getal 16 als grondtal, en is verwant met het binaire stelsel. De getallen 0 t/m 15 worden gerepresenteerd als:
0 - 0
1 - 1
2 - 2
3 - 3
......
10 - A
11 - B
.......
15 - F
Een binair getal van 4 bits breed noemt men een nibble. De waarde van een nibble kan door precies één hexadecimaal cijfer worden weergegeven. Het getal 13 bijvoorbeeld is binair 1101, en hexadecimaal D.
Dus:
0000 - 0
0001 - 1
0010 - 2
0011 - 3
..........
1010 - A
1011 - B
..........
1111 - F

De hexdecimale schrijfwijze heeft tot gevolg dat het bekijken van grote getallen makkelijker wordt:
255 decimaal = 1111 1111 binair = FF hexadecimaal.

Optellen
Hexadecimaal optellen werkt weer hetzelfde als decimaal en binair optellen. De volgende regels nemen we in acht:
9 + 1 = A
F + 1 = 10
Sommeren we twee hexadecimale getallen, dan beginnen we met het optellen van de twee least significant nibbles. Is de uitkomst van de som 10, dan plaatsen we een '0' in de uitkomst-nibble en een '1' geven we door naar het volgende nibble:
v
0F
01
--- +
10

of

v
0F
06
--- +
15

of

vv
0FF
016
---- +
115

Voor gevorderden: opteller hardware

Dit artikel begint met de vraag hoe hardware (elektronica) in staat is om berekeningen uit te voeren. De oplossing voor dit probleem is dat men decimale getallen omzet naar binaire getallen. Daarmee is prima te rekenen in elektronica. Hiernaast is een binaire opteller geillustreerd; zo'n opteller bestaat uit twee (veel gebruikte) logische poorten, de NAND en en de XOR.
Tijdens het optellen voeren we telkens 2 operaties uit (zie bovenstaande berekeningen). Het optellen van 2 bits, en het doorgeven van de carry. We kunnen de binaire optelling van twee bits ontleden in 2 uitkomsten:
  • som = bit1 XOR bit2
  • carry = bit1 AND bit2

Met een XOR en een NAND (de NAND kan ook gebruikt worden voor een AND-functie) is deze schakeling te realiseren. Men noemt dit circuit ook wel half-adder. Wanneer we 2 binaire getallen willen optellen door middel van een digitaal circuit, moeten we het carry-bit doorgeven aan de opeenvolgende bits. Dit betekent dat de carry als input fungeert voor de volgende som. Een som bestaat dus voor elk bit uit 3 inputs: (bit1 + bit2 + carry vorige som). Het heeft als uitkomst een som-bit en een nieuwe carry. Om een volledige som uit te voeren moeten we dus een aantal half-adders aan elkaar schakelen. De schakeling die een dergelijke volledige som uitvoert heeft full-adder.

Lees verder

© 2009 - 2012 Tronic, gepubliceerd in Techniek (Wetenschap) op . Het auteursrecht van dit artikel ligt bij de infoteur. Zonder toestemming van Tronic is vermenigvuldiging van dit artikel verboden. Meer informatie…

Gerelateerde artikelen
Binaire coderingen In de digitale wereld rekent men met enen en nullen; het zogenaamde binaire talstelsel. Dit talstelsel…
Logische poorten, de XOR Een van de meest elementaire digitale bouwstenen is de XOR. Naast zijn broertjes NAND en NOR, wo…
Binair vermenigvuldigen Het vermenigvuldigen van twee binaire getallen is een operatie die veelvuldig wordt toegepast in…
Digitaal en analoog De Griekse filosoof en wiskundige Pythagoras stelde: "Het getal is het wezen van alles". Tegenwoordig…
Soorten getallen In de wiskunde zijn verschillende soort getallen bekend. Deze soorten getallen hebben allen hun eigen ei…

Reageer op het artikel "Binair en hexadecimaal rekenen"

Er zijn nog geen reacties geplaatst op dit artikel.
Infoteur: Tronic
Rubriek: Wetenschap / Techniek
Schrijf mee!