Wat is een positiestelsel
In het decimale getal 4.095 is de 4 niet 4 waard: hij is 4.000 waard, omdat hij op de plaats van de duizendtallen staat. Elke positie vermenigvuldigt het cijfer met een macht van 10 (1, 10, 100, 1.000…). Dat is het positiestelsel, en het grondtal is het aantal verschillende cijfers dat gebruikt wordt: tien in het decimale stelsel.
Binair werkt hetzelfde, maar met grondtal 2: er bestaan alleen 0 en 1, en elke plaats is twee keer zoveel waard als de vorige. Hexadecimaal gebruikt grondtal 16: de zestien cijfers zijn 0 tot 9 en de letters A tot F, en elke plaats is 16 keer zoveel waard als de vorige. Computers werken binair omdat een schakeling maar twee toestanden hoeft te onderscheiden (uit en aan), en hexadecimaal is een korte manier om die bits op te schrijven.
| Positie (van rechts naar links) | Waarde in binair | Waarde in hexadecimaal |
|---|---|---|
| 1e | 1 | 1 |
| 2e | 2 | 16 |
| 3e | 4 | 256 |
| 4e | 8 | 4.096 |
| 5e | 16 | 65.536 |
| 6e | 32 | 1.048.576 |
| 7e | 64 | 16.777.216 |
| 8e | 128 | 268.435.456 |
Van binair naar decimaal, met de hand
Je schrijft elk cijfer op met de waarde van zijn plaats en telt alleen de plaatsen op waar een 1 staat. Voorbeeld met 1101: van rechts naar links zijn de plaatsen 1, 2, 4 en 8 waard.
- Schrijf het getal op en daaronder de waarde van elke positie: 1 1 0 1 boven 8 4 2 1.
- Kijk wat er op elke plaats staat: een 1 op de plaats van 8, een 1 op die van 4, een 0 op die van 2 en een 1 op die van 1.
- Negeer de plaatsen met een 0 (hier die van 2).
- Tel op: 8 + 4 + 0 + 1 = 13. Dus 1101 binair is 13 decimaal.
Met meer cijfers is het hetzelfde: 11111111 is 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255, de grootste waarde die in 8 bits past. En 10110110 is 128 + 32 + 16 + 4 + 2 = 182.
Van decimaal naar binair, met herhaald delen
Je deelt het getal telkens door 2 en noteert de rest van elke deling (altijd 0 of 1), tot je bij quotiënt 0 uitkomt. De resten, van onder naar boven gelezen, vormen het binaire getal. Voorbeeld met 45:
- 45 ÷ 2 = 22, rest 1
- 22 ÷ 2 = 11, rest 0
- 11 ÷ 2 = 5, rest 1
- 5 ÷ 2 = 2, rest 1
- 2 ÷ 2 = 1, rest 0
- 1 ÷ 2 = 0, rest 1
Lees je de resten van onder naar boven, dan krijg je 101101. Tel om te controleren op: 32 + 8 + 4 + 1 = 45.
Er is ook een alternatieve methode die veel mensen fijner vinden: machten van 2 aftrekken van groot naar klein. Voor 200: de 128 past (er blijft 72 over), de 64 past (er blijft 8 over), de 32 en 16 passen niet, maar de 8 wel (er blijft 0 over). De gebruikte plaatsen zijn 128, 64 en 8, dus 200 = 11001000.
Hexadecimaal: zestien cijfers en een tabel om bij de hand te hebben
Omdat er geen cijfers bestaan voor 10 tot 15, worden de letters A, B, C, D, E en F gebruikt. Eén hexadecimaal cijfer komt precies overeen met vier bits (een «nibble»), en daarom is het zo handig: een byte van 8 bits schrijf je met slechts twee hexadecimale cijfers.
Om van hexadecimaal naar decimaal te rekenen vermenigvuldig je elk cijfer met de macht van 16 van zijn plaats en tel je op. Bijvoorbeeld 3F = 3 × 16 + 15 = 63 en A3 = 10 × 16 + 3 = 163.
| Decimaal | Binair (4 bits) | Octaal | Hexadecimaal |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
Waarom hexadecimaal wordt gebruikt: bytes, kleuren en adressen
Een byte is 8 bits en loopt van 0 tot 255 (00000000 tot 11111111). Bits met de hand opschrijven is traag en foutgevoelig; in hexadecimaal is dezelfde byte twee tekens, van 00 tot FF. Om van binair naar hexadecimaal te gaan, verdeel je de bits van rechts af in groepen van vier en vervang je elke groep door het cijfer uit de tabel. Voorbeeld: 11010111 splitst in 1101 en 0111, dat zijn D en 7, dus de waarde is D7. Decimaal is dat 13 × 16 + 7 = 215.
Het bekendste geval zijn webkleuren. In #FF8800 zitten drie bytes: FF voor rood (255), 88 voor groen (136) en 00 voor blauw (0). Het is een intens oranje: al het rood, iets meer dan de helft van het groen en geen blauw. Hexadecimaal komt ook voor in geheugenadressen, foutcodes en netwerkidentificaties.
Van tekst naar binair met ASCII
Een computer bewaart elke letter als een getal, en dat getal als bits. In de ASCII-tabel is de A gelijk aan 65, wat in binair van 8 bits 01000001 is. Het woord «Hi» bestaat uit twee letters: H is 72 (01001000) en i is 105 (01101001), dus het wordt geschreven als 01001000 01101001. Met «Hola» zijn het 72, 111, 108 en 97, dus 01001000 01101111 01101100 01100001, of in hexadecimaal 48 6F 6C 61.
De tool gebruikt de UTF-8-codering: voor gewone Engelse letters neemt elk teken één byte van 8 bits in, maar een é, een letter met trema of een emoji neemt meerdere bytes in, dus dat geeft meer dan 8 bits. De ñ bijvoorbeeld bestaat uit twee bytes: 11000011 10110001 (C3 B1 in hexadecimaal).
Zo doe je dit allemaal met de tool
De omzetter «Binair, decimaal en hex» is handig om je sommen met de hand te controleren of om lange getallen foutloos op te lossen.
- Typ het getal in het veld van zijn talstelsel: «Decimaal (grondtal 10)», «Binair (grondtal 2)», octaal of «Hexadecimaal (grondtal 16)». De andere drie worden vanzelf ingevuld.
- Als een cijfer niet bij het talstelsel hoort (bijvoorbeeld een 2 in binair), meldt de tool dat.
- Voor tekst typ je die in het veld «Tekst» en kijk je naar «Binair (8 bits per teken)» en het hexadecimale resultaat per byte. Je kunt ook bits in groepen van 8 plakken om terug naar tekst te gaan.
- Voor ongebruikelijke talstelsels gebruik je «Elk talstelsel (2 tot 36)»: je kiest het beginstelsel, het doelstelsel en het getal.
De beperkingen: de tool rekent alleen niet-negatieve gehele getallen om (zonder decimalen of teken) en zet niet zelf voorloopnullen neer, dus als je vaste 8 bits wilt, moet je zelf aanvullen (13 is 00001101). Niets van wat je typt verlaat je browser.
Veelgemaakte fouten
- De resten in de verkeerde richting lezen: bij herhaald delen is de eerste rest het meest rechtse cijfer, niet het meest linkse.
- Voorloopnullen vergeten als ze nodig zijn: 13 is 1101, maar als byte is het 00001101. Dat doet ertoe als de lengte deel uitmaakt van de gegevens, zoals bij een kleur of een netwerkmasker.
- De letter O verwarren met de nul of de hexadecimale B (11) met een 8 bij het overnemen. In hexadecimaal tellen letters hetzelfde als hoofdletter of kleine letter, maar het is niet hetzelfde als een cijfer.
- Het voorvoegsel 0x of het teken # laten staan bij het omrekenen: het zijn alleen aanduidingen dat het getal hexadecimaal is en je moet ze weghalen voordat je plakt.
- Denken dat 10 in binair tien is: het is twee. Hetzelfde «10» is 2, 10 of 16 waard, afhankelijk van het talstelsel.
Uitgewerkte oefeningen
Probeer elke opgave op te lossen voordat je naar het antwoord kijkt en controleer daarna met de tool.
- Reken 10110110 om naar decimaal en hexadecimaal. Antwoord: 128 + 32 + 16 + 4 + 2 = 182; in groepen van vier, 1011 0110 = B6.
- Reken 200 om naar binair en hexadecimaal. Antwoord: 11001000 en C8 (12 × 16 + 8 = 200).
- Reken 7F om naar binair. Antwoord: 7 = 0111 en F = 1111, dus 01111111, en dat is decimaal 127.
- Schrijf «OK» in binair. Antwoord: O is 79 en K is 75, dus 01001111 01001011.
Veelgestelde vragen
Hoe reken ik 1101 van binair om naar decimaal?
Je telt de waarden op van de plaatsen waar een 1 staat: 8 + 4 + 1 = 13. Het tweede cijfer van rechts is een 0, dus de 2 telt niet mee.
Hoeveel is 255 in binair en in hexadecimaal?
255 is 11111111 in binair en FF in hexadecimaal. Het is de grootste waarde die in een byte van 8 bits past.
Waarom gebruikt hexadecimaal letters?
Omdat het zestien verschillende symbolen nodig heeft en het decimale stelsel er maar tien levert (0 tot 9). Daarom is A gelijk aan 10, B aan 11, C aan 12, D aan 13, E aan 14 en F aan 15.
Hoeveel verschillende getallen kun je met 8 bits schrijven?
256, van 0 tot 255. In het algemeen kun je met n bits 2 tot de macht n waarden weergeven.
Rekent de tool negatieve getallen of decimalen om?
Nee, alleen niet-negatieve gehele getallen. Voor tekst gebruikt hij UTF-8, dus letters met accenten en emoji's geven meer dan 8 bits.