Wat is binair: Over bits, bytes, nullen en enen
We hebben allemaal gehoord over de bits en bytes waar een computer mee werkt. En dat een computer eigenlijk alleen nullen en enen begrijpt. Maar wat houdt dat nou precies in? Wat kun je met alleen nullen en enen? En hoe is het mogelijk dat computers al die taken en programma's kunnen uitvoeren, wanneer er alleen maar met 1'en en 0'en gewerkt kan worden?
Computer hanteren een binair talstelsel, waarin alleen enen en nullen voorkomen. Wij mensen gebruiken het decimale stelsel, dus de getallen 0 t/m 9. Daar zijn we allemaal zo mee vertrouwd en wordt zo vroeg aangeleerd dat we ons er bijna niet bewust van zijn. Maar eigenlijk is het niet meer dan een afspraak en hadden we ook voor een ander talstelsel kunnen kiezen. En bij een decimaal talstelsel gelden precies dezelfde principes als bij een binair talstelsel.
Talstelsels
In een talstelsel is er sprake van een bepaald grondtal. In het decimale systeem is dat het getal 10. Dit grondtal geeft de waarde van elke positie in een getal aan. Het getal op iedere positie moet vermenigvuldigd worden met een bepaalde macht van 10 en het geheel moet opgeteld worden om op het totaal te komen. Voor de volledigheid:
- 1e pos: 10^0 = 1
- 2e pos: 10^1 = 10
- 3e pos: 10^2 = 100
- 4e pos: 10^3 = 1000
Hierbij is de positienummering van rechts naar links. De eerste positie is dus het meest rechtse cijfer van een getal en dit heeft de laagste waarde. Het maximale getal dat in een getal van 4 cijfers (of posities) past is daarmee 9999 (9*1000 + 9*100 + 9*10 + 9*1). Neem bijvoorbeeld het getal 59. Dit is 10^0 * 9 plus 10^1 * 5. Dit is dus 1*9 + 10*5 = 59. Dit ziet er misschien in eerste instantie nodeloos ingewikkeld uit, maar het wordt interessanter als we hetzelfde principe in talstelsels met een ander grondtal gaan toepassen.
Nu in andere talstelsels
In plaats van een grondtal van 10 kunnen we ook kiezen voor een grondtal van 6. Dat betekent dat we alleen gebruik kunnen maken van de getallen 0 t/m 5. Als we een getal van meerdere cijfers weergeven, dan moeten we ook weer elke positie vermenigvuldigen met een bepaalde macht van 6. Dus dit betekent:
- 1e pos: 6^0 = 1
- 2e pos: 6^1 = 6
- 3e pos: 6^2 = 36
- 4e pos: 6^3 = 216
Dit zijn geen mooie ronde getallen, maar dat is alleen maar omdat wij zo gewend zijn aan het decimale stelsel. Als we nu het getal 59 willen weergeven in dit talstelsel dan wordt dit 135. Dat gaan we even narekenen:
- 1e pos: 5 * 6^0 = 5*1 = 5
- 2e pos: 3 * 6^1 = 3*6 = 18
- 3e pos: 1 * 6^2 = 1*36 = 36
Als we deze drie waarden (36+18+5) optellen, dan komen we inderdaad weer op 59 uit. Wat dus opvalt, is dat bij dit talstelsel er meer cijfers nodig zijn dan in het decimale stelsel om hetzelfde getal weer te geven. Dit is natuurlijk ook logisch, omdat er ook minder unieke getallen (0 t/m 5) beschikbaar zijn. We lopen sneller uit het maximale bereik, zodat we weer een extra cijfer moeten toevoegen. Het maximale getal dat kan worden weergegeven met 4 cijfers in dit talstelsel is 5555. In het decimale stelsel is deze '5555' gelijk aan 1295 (5*216 + 5*36 + 5*6 + 5*1 = 1080+180+30+5 = 1295).
Bovenstaand principe geldt voor alle talstelsels ongeacht het grondtal. In plaats van een grondtal kleiner dan 10 kan er ook gewerkt worden met een grondtal groter dan 10. Dit is bijvoorbeeld het geval bij hexadecimaal, waar 16 het grondtal is. Daar komen we later op terug.
En nu binair
Terug naar het originele onderwerp: de enen en nullen. Computer werken met slechts enen en nullen en dit wordt het binaire stelsel genoemd. 'Bi' betekent twee en twee is het grondtal van het binaire stelsel. Dit betekent dat alleen de getallen 0 t/m 1 beschikbaar zijn. Als we terugdenken aan het voorbeeld hierboven, betekent dat dus dat we in het binaire stelsel heel snel uit het maximum bereik van één positie of cijfer lopen. De waarden van de verschillende posities zijn als volgt:
- 1e pos: 2^0 = 1
- 2e pos: 2^1 = 2
- 3e pos: 2^2 = 4
- 4e pos: 2^3 = 8
- 5e pos: 2^4 = 16
- 6e pos: 2^5 = 32
- 7e pos: 2^6 = 64
- 8e pos: 2^7 = 128
Voor het getal 5 heb je binair al drie posities nodig, namelijk 101. Dit is 1*2^2 + 0*2^1 + 1*2^0 = 4+0+1 = 5.
Het eerder genoemde getal 59 ziet er als volgt uit: 111011. Dit is 1*2^5 + 1*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 1*32 + 1*16 + 1*8 + 0*4 + 1*2 + 1*1 = 59.
Het maximale getal wat in een binair getal van 4 posities past is de decimale waarde 15 (8+4+2+1).
Bits en Bytes
In de digitale wereld worden de posities bits genoemd. Dus iedere positie is 1 bit. Een groep van 8 bits wordt een byte genoemd. Het getal wat maximaal in een 8-bits getal past is, zoals gezegd 255. Dit is dus ook de maximale waarde die in een byte past. Tegenwoordig zijn de computers veelal 32 bits of zelfs 64 bits. Het effect daarvan is dat de getallen waar een computer in één slag mee kan rekenen, veel groter kunnen zijn. Het gemiddelde computer programma heeft meestal een groter bereik nodig dan één byte (255). Een overzicht:
- In 8-bit past maximaal 255,
- In 16-bit past maximaal 65535,
- In 32-bit past maximaal 4.294.967.295
- In 64-bit past maximaal 18.446.744.073.709.551.615.
Hexadecimaal
Het hexadecimale stelsel is een talstelsel met 16 als grondtal. Dit betekent dat er 16 verschillende cijfers zijn per positie. Maar aangezien er maar 10 cijfers bestaan, is er gekozen om met letters verder te nummeren. Dus bij hexadecimaal hebben we de getallen 0 t/m 9 gevolgd door A t/m F. Daarbij is A gelijk aan 10 en F gelijk aan 15. Hiermee kunnen dus de waarden 0 t/m 15 weergegeven worden met een enkele positie. Per positie betekent dat dus:
- 1e pos: 16^0 = 1
- 2e pos: 16^1 = 16
- 3e pos: 16^2 = 256
- 4e pos: 16^3 = 4096
Het getal 59 wordt hexadecimaal 3B. Namelijk 3*16^1 + 11*16^0 = 48 + 11 = 59.
Met vier posities kan maximaal 65.535 weergegeven worden.
Gebruik van hexadecimaal
Het is geen toeval dat het maximum van 65535 bij vier hexadecimale posities gelijk is aan het maximum bij 16 binaire bits. Hetzelfde geldt namelijk voor één hexadecimaal cijfer en 4 binaire bits. Deze kunnen beide maximaal de decimale waarde 15 weergeven. Dit is verklaarbaar omdat het hexadecimale grondtal 16 gelijk is aan het binaire grondtal 2 tot de macht 4. Vandaar dat vier binaire bits hetzelfde bereik heeft als één hexadecimaal cijfer.
Bij fouten worden ook vaak hexadecimale codes getoond.
Om deze reden wordt de hexadecimale notatie veel gebruikt door mensen in de informatica. In plaats van lange reeksen van enen en nullen die moeilijk te ontcijferen zijn, kan er steeds een groepje van 4 bits samengenomen worden in één hexadecimaal getal. Voor een 32 bits getal kan dan volstaan worden met 8 hexadecimale cijfers.
Lees verder