Getalstelsels omrekenen (binair ↔ hexadecimaal ↔ decimaal)

Reken een getal om tussen binair, hexadecimaal, decimaal en octaal. Vul de waarde in, kies in welk stelsel je hem schrijft, en kopieer elke representatie.

Rekenmachine

Decimaal255
Binair0b11111111
Hexadecimaal0xFF
Octaal0377

Het getal is decimaal 255, binair 0b11111111, hexadecimaal 0xFF en octaal 0377.

In de digitale elektronica werk je voortdurend met verschillende getalstelsels. Een microcontroller rekent intern in binair (grondtal 2), een register of geheugendump lees je meestal in hexadecimaal (grondtal 16) omdat dat compacter is, en mensen denken nu eenmaal in decimaal (grondtal 10). Soms kom je ook nog octaal (grondtal 8) tegen, bijvoorbeeld in oudere systemen of bij bestandsrechten. Deze tool zet één getal in alle vier de stelsels naast elkaar, zodat je niet handmatig hoeft om te rekenen.

Je vult de waarde in zoals je hem opschrijft en kiest het bronstelsel. Schrijf je hexadecimaal, dan typ je bijvoorbeeld FF (of 0xFF); schrijf je binair, dan 11111111 (of 0b11111111). De calculator herkent de gangbare 0x- en 0b-voorvoegsels en negeert spaties, zodat je een nibble-gegroepeerde waarde als 1111 1111 ook gewoon kunt plakken. Alles berust op zuivere wiskunde — geen database, geen onderhoud.

Waarom hexadecimaal?

Eén hexcijfer komt exact overeen met vier bits (een nibble), en twee hexcijfers met één byte. Daardoor is 0xFF veel makkelijker te lezen en te onthouden dan 11111111. Bij het instellen van registers, kleurcodes of bitmaskers werk je daarom bijna altijd in hex.

De formule

decimaal = Σ ( cijfer_i × grondtal^i )\n1 hexcijfer = 4 bits (nibble)\n2 hexcijfers = 1 byte\n8 bits      = 1 byte  →  bereik 0–255 (0x00–0xFF)
  • binair — grondtal 2 (0,1)
  • octaal — grondtal 8 (0–7)
  • decimaal — grondtal 10 (0–9)
  • hexadecimaal — grondtal 16 (0–9, A–F)

Voorbeeld: 0xFF = 15·16¹ + 15·16⁰ = 240 + 15 = 255 = 0b11111111.

Uitgewerkt voorbeeld

Je leest in een datasheet dat een register de waarde 0x2A moet krijgen. Wat is dat decimaal en binair?

0x2A = 2·16 + 10 = 32 + 10 = 42 decimaal. Binair is dat 0b101010. Octaal wordt het 052. Andersom: het decimale getal 255 is de grootste waarde die in één byte (8 bits) past, namelijk 0xFF oftewel 0b11111111.

Het « waarom » & de praktijk

Let op de byte-grenzen. Een unsigned waarde van 8 bits loopt van 0 t/m 255 (0x00–0xFF); 16 bits loopt tot 65535 (0xFFFF); 32 bits tot ruim 4 miljard. Wil je een getal opslaan dat groter is dan het bereik van het datatype, dan treedt overflow op en "rolt" de waarde rond. Reken daarom altijd na of je waarde binnen de breedte van je register of variabele past.

Bij negatieve getallen gebruiken processoren meestal de tweecomplement-notatie: het meest significante bit is het tekenbit, en −1 wordt in 8 bits 0xFF (0b11111111). Deze tool werkt met niet-negatieve gehele getallen; voor signed interpretatie moet je het tweecomplement zelf in gedachten houden. Voor het schalen van een analoge meetwaarde naar een digitale code kijk je naar de ADC-resolutie-calculator, en voor het middelen van een PWM-signaal naar de PWM-spanningstool.

Veelgestelde vragen

Hoe reken ik hexadecimaal naar decimaal om?
Vermenigvuldig elk hexcijfer met de bijbehorende macht van 16 en tel op. 0x2A = 2·16 + 10 = 42. De tool doet dit automatisch en toont meteen ook de binaire en octale vorm.
Wat betekenen de voorvoegsels 0x en 0b?
0x geeft aan dat een getal hexadecimaal is genoteerd (0xFF), en 0b dat het binair is (0b11111111). Het zijn schrijfconventies; de calculator herkent ze en je mag ze weglaten.
Hoeveel waarden passen er in een byte?
Een byte is 8 bits en kan dus 2⁸ = 256 verschillende waarden bevatten: 0 t/m 255, oftewel 0x00 t/m 0xFF. Dat is precies waarom 255 (0xFF) zo vaak opduikt.
Waarom gebruiken programmeurs hexadecimaal?
Omdat één hexcijfer exact vier bits voorstelt. Een byte schrijf je dan met twee tekens (0xFF) in plaats van acht (11111111), wat registers, kleurcodes en bitmaskers veel leesbaarder maakt.
Kan ik ook spaties of nibbles plakken?
Ja. De tool negeert spaties en underscores, dus een gegroepeerde waarde als 1111 1111 of 1111_1111 wordt gewoon correct ingelezen als binair getal.