Ontwikkelaars

Getalstelsel Omrekenen: Binair, Octaal, Decimaal en Hex met de Hand

9 min leestijd

Om een decimaal getal om te rekenen naar een ander grondtal, deel je het herhaaldelijk door dat grondtal en lees je de restwaarden van onder naar boven, of je trekt bij binair de grootste passende macht van 2 er telkens vanaf. Beide methodes geven hetzelfde antwoord: het getal 202 wordt binair 11001010, octaal 312 en hexadecimaal CA.

Wat een getalstelsel (grondtal) precies is

Een getalstelsel, ook wel grondtal of radix genoemd, bepaalt hoeveel unieke cijfers een positioneel talstelsel gebruikt voordat het “overloopt” naar de volgende positie. Decimaal (grondtal 10) gebruikt de cijfers 0 tot en met 9. Binair (grondtal 2) kent alleen 0 en 1. Octaal (grondtal 8) gebruikt 0 tot en met 7. Hexadecimaal (grondtal 16) heeft meer dan tien symbolen nodig, dus na 9 gaat het verder met de letters A tot en met F voor de waarden 10 tot en met 15.

Het idee achter positienotatie is dat elk cijfer meetelt volgens zijn positie, vermenigvuldigd met een macht van het grondtal. In het decimale getal 202 staat de 2 helemaal links op de honderdtallenpositie, dus die 2 staat voor 2 × 10². De 0 daarnaast staat voor 0 × 10¹, en de laatste 2 voor 2 × 10⁰. Tel je dat op (200 + 0 + 2), dan kom je weer uit op 202. Diezelfde logica geldt voor elk ander grondtal, alleen verandert de macht waarmee je vermenigvuldigt.

Machten van twee leveren in elk grondtal opvallend ronde uitkomsten op. Neem 4096 (2¹²): binair is dat 1000000000000, octaal 10000 en hexadecimaal 1000. Dat is geen toeval maar een gevolg van hoe binair, octaal en hexadecimaal allemaal machten van 2 als basis hebben.

Decimaal omrekenen naar binair, octaal en hex: het getal 202

Er zijn twee manieren om een decimaal getal met de hand om te zetten. Voor octaal en hex werkt de deel-en-rest-methode het snelst: je deelt herhaaldelijk door het doelgrondtal en onthoudt elke rest, om die resten vervolgens van onder naar boven af te lezen.

Voor 202 naar octaal:

StapDelingQuotiëntRest
1202 ÷ 8252
225 ÷ 831
33 ÷ 803

Lees de restkolom van onder naar boven: 3, 1, 2. Dat geeft octaal 312.

Voor 202 naar hexadecimaal:

StapDelingQuotiëntRest
1202 ÷ 161210 (A)
212 ÷ 16012 (C)

Van onder naar boven lees je C, A, wat hexadecimaal CA oplevert. De resten 10 en 12 vallen buiten het bereik van een enkel decimaal cijfer, dus die worden vertaald naar de hexletters A en C.

Voor binair werkt de plaatswaardemethode net zo goed, en is voor de meeste mensen intuïtiever: je zoekt telkens de grootste macht van 2 die nog in het overgebleven getal past, trekt die af, en herhaalt dat tot er niets meer overblijft.

Macht van 21286432168421
Past in 202?JaJaNeeNeeJaNeeJaNee
Bit11001010

128 past in 202 (rest 74), 64 past in 74 (rest 10), 32 en 16 passen niet meer in 10, 8 past in 10 (rest 2), 4 past niet in 2, 2 past precies (rest 0), en 1 past niet meer. De bits die op 1 staan lees je van links naar rechts af als 11001010, en 128 + 64 + 8 + 2 telt inderdaad op tot 202. Dat is dezelfde uitkomst als de deel-en-rest-methode zou geven als je die op grondtal 2 zou toepassen, maar de aftrekmethode maakt voor binair meestal minder rekenfouten.

Octaal en hex terug omrekenen naar decimaal: het getal 755

Getal 755 is geen willekeurig voorbeeld: het is de klassieke Unix chmod-permissiewaarde die je in elke terminal tegenkomt zodra je bestandsrechten instelt. Om te lezen wat die waarde decimaal betekent, vermenigvuldig je elk octale cijfer met zijn plaatswaarde en tel je op.

Cijfer755
Plaatswaarde8² = 648¹ = 88⁰ = 1
Vermenigvuldiging7 × 64 = 4485 × 8 = 405 × 1 = 5

Tel 448, 40 en 5 op en je krijgt 493. Octaal 755 is dus decimaal 493.

Voor de binaire vorm hoef je niet eens via decimaal te gaan. Elk octaal cijfer staat exact voor 3 binaire bits, dus je kunt elk cijfer los omzetten en de resultaten aan elkaar plakken: 7 wordt 111, 5 wordt 101, en de tweede 5 wordt opnieuw 101. Aan elkaar geplakt levert dat 111101101 op, precies de binaire vorm van 493.

Diezelfde truc bestaat voor hexadecimaal, alleen dan met groepjes van 4 bits (een nibble) in plaats van 3. Vul 111101101 aan tot een veelvoud van 4 bits door er voor nullen aan toe te voegen: 0001 1110 1101. Elke groep van 4 vertaal je los naar een hexcijfer: 0001 is 1, 1110 is E, 1101 is D. Dat geeft hexadecimaal 1ED, en dat klopt met wat je zou krijgen door 493 direct met de deel-en-rest-methode naar hex om te rekenen.

Dit is precies waarom hexadecimaal zo’n vaste plek heeft in computing: elk hexcijfer komt exact overeen met 4 binaire bits, dus 2 hexcijfers dekken een volledige byte. Een kleur als #FF00CC is compacter en makkelijker te lezen dan de bijbehorende 24 binaire cijfers, en hetzelfde geldt voor geheugenadressen en foutcodes. Octaal komt minder vaak voor in moderne code, maar duikt nog altijd op in Unix-bestandsrechten, precies om de reden hierboven: 3 bits per cijfer sluit netjes aan op de rwx-groepen (lezen, schrijven, uitvoeren) van eigenaar, groep en overigen.

Reken met je eigen getallen

Typ een waarde in decimaal, binair, octaal of hex en de andere drie velden werken automatisch mee terwijl je typt, zonder dat je op een knop hoeft te drukken.

Getalstelsel Omzetter
Gratis, geen registratie, werkt op elk apparaat.
Open de volledige tool

Veelgemaakte fouten en randgevallen

Two’s complement verwachten bij negatieve getallen. Zet je een minteken voor een waarde, bijvoorbeeld decimaal -18, dan toont deze tool -10010 binair, -22 octaal en -12 hexadecimaal. Dat is teken-grootte-notatie (sign-magnitude): gewoon een minteken voor de absolute waarde in elk grondtal. Veel programmeurs verwachten hier two’s complement, waarin -18 als 8-bits signed binair getal juist 11101110 zou zijn, een compleet andere bitpatroon. Als je code schrijft die two’s complement gebruikt (zoals de meeste processortalen), reken dan niet klakkeloos de uitkomst van deze tool één op één door naar bitpatronen in je programma.

Hoofdletters en kleine letters door elkaar halen bij hex. Je kunt hexadecimale cijfers zowel met kleine letters (a-f) als hoofdletters (A-F) intypen, de tool accepteert beide. De uitvoer toont hex echter altijd consequent in hoofdletters, dus CA en niet ca, ook als je zelf kleine letters typte.

Denken dat voorloopnullen de waarde veranderen. 0202 decimaal, 00011001010 binair of 0312 octaal stellen precies dezelfde waarde voor als hun kortere vorm. Voorloopnullen zijn puur opmaak en hebben geen invloed op de plaatswaardeberekening, want de eerste significante 1 (of het eerste niet-nul cijfer) bepaalt waar de telling echt begint.

Vertrouwen op de tool voor extreem grote getallen. De omzetter werkt binnen het bereik van veilige gehele getallen in JavaScript, ruwweg tot 2^53 min 1, oftewel ongeveer 9 biljard. Ga je daaroverheen, dan verliest de berekening precisie. Voor de meeste dagelijkse en programmeertaken, ver onder die grens, merk je hier niets van.

0x, 0b of 0o prefixen meesturen. In veel programmeertalen schrijf je een hexadecimaal getal als 0xCA, binair als 0b11001010 of octaal als 0o312, met een prefix die het grondtal aangeeft. Deze tool verwacht alleen de kale cijfers zonder die prefix: typ CA, niet 0xCA. Plak je toch de volledige code-notatie inclusief prefix, dan herkent het veld die tekens niet als geldige cijfers voor dat grondtal.

Veelgestelde vragen

Wat is een grondtal of radix precies? Een grondtal (radix) is het aantal unieke cijfers dat een positioneel talstelsel gebruikt voordat het naar de volgende positie overloopt. Decimaal telt met 10 cijfers (0-9), binair met 2 (0-1), octaal met 8 (0-7) en hexadecimaal met 16 (0-9 plus A-F). Hoe hoger het grondtal, hoe compacter je grote waarden kunt schrijven, omdat elke cijferpositie meer mogelijke waarden vertegenwoordigt.

Waarom werken programmeurs zoveel met hexadecimaal in plaats van gewoon binair? Omdat elk hexadecimaal cijfer precies 4 binaire bits vertegenwoordigt, is hex een compacte, leesbare steno voor binaire data. Een bytewaarde die binair 8 cijfers nodig heeft, past hexadecimaal in slechts 2. Dat maakt geheugenadressen, kleurcodes zoals #RRGGBB en foutcodes veel behapbaarder dan de volledige binaire representatie, terwijl de omzetting tussen beide (in tegenstelling tot bijvoorbeeld decimaal naar binair) altijd exact en zonder afronding verloopt.

Hoe zet ik een binair getal met de hand om naar decimaal? Vermenigvuldig elke bit met de macht van 2 die bij zijn positie hoort, gerekend van rechts naar links vanaf 2⁰, en tel de resultaten op. Voor 11001010 komt dat neer op 128 + 64 + 0 + 0 + 8 + 0 + 2 + 0, wat weer uitkomt op 202, hetzelfde getal waarmee dit artikel begon.

Wat is het grootste getal dat deze tool aankan? De omzetter blijft betrouwbaar binnen het bereik van veilige gehele getallen in JavaScript, ongeveer tot 2^53 min 1 (zo’n 9 biljard). Voor waarden daarboven, wat in de praktijk zelden voorkomt buiten cryptografie en specialistische berekeningen, heb je een toegewijde bibliotheek voor grote gehele getallen nodig.

Ondersteunt de tool negatieve getallen? Ja. Zet een minteken voor een waarde in om het even welk van de vier velden, en de andere drie velden tonen automatisch de negatieve tegenhanger in hun eigen grondtal. Let op dat dit teken-grootte-notatie is en geen two’s complement, zoals hierboven bij de randgevallen wordt uitgelegd.

Kan ik een vooraf ingevulde link naar deze tool delen? Ja, op de volledige toolpagina wordt de URL automatisch bijgewerkt terwijl je typt, dus je kunt de link uit de adresbalk kopiëren of de deelknop gebruiken om iemand anders exact jouw waarden te laten zien, al ingevuld en klaar voor gebruik.

BinairHexadecimaalGetalstelselsProgrammeren
Getalstelsel Omzetter
Probeer het nu zelf met de volledige tool.
Nu proberen