Binair
Hoe werkt binair?
Computers gebruiken geen 10-tallig stelsel, maar een 2-tallig stelsel.
Dat heet binair (engels: binary).
Bij een 10-tallig stelsel heb je de getallen 0 tot 9, maar bij een 2-tallig stelsel (binair) 0 tot 1.
Computers rekenen in binair, omdat ze getallen doorgeven door elektrische stroompulsjes.
Een computer kan alleen kijken of er wel of geen stroom is.
Een computer ziet wel stroom als een 1, en geen stroom als een 0.
Hoe zet je binair om in 10-tallige getallen?
Het handigst is om het binaire getal om te zetten in een tabelletje.
Hier een voorbeeld voor een 10-tallig getal, het getal 3672:
Nu met getallen in plaats van machten:
Om het uiteindelijke getal te krijgen, vermenigvuldig je het getal uit de lichtblauwe rij met het getal uit de donkerblauwe rij:
3 * 1000 + 6 * 100 + 7 * 10 + 2 * 1 = 3672
Zo werkt het ook in binair, alleen dan met een macht van 2, omdat het een
2-tallig stelsel is in plaats van een
10-tallig stelsel:
| 27 |
26 |
25 |
24 |
23 |
22 |
21 |
20 |
| 1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
Nu hetzelfde voorbeeldje maar nu weer met getallen in plaats van machten:
| 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
| 1 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
Ook hier moet je, om het binaire getal om te zetten in een 10-tallig getal, telkens het getal uit de lichtblauwe rij vermenigvuldigen met het getal uit de donkerblauwe rij:
1 * 128 + 1 * 64 + 1 * 32 + 0 * 16 + 1 * 8 + 1 * 4 + 0 * 2 + 0 * 1 =
128 + 64 + 32 + 8 + 4 =
236
Dus om een getal om te zetten in binair kun je het handigst het getal eerst in een tabelletje zetten, en dan telkens alle getallen uit de donkerblauw rij waar in de lichtblauwe rij een
1 staat op te tellen.
Voor als het nog niet duidelijk is, is hier nog een voorbeeldje:
| 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
| 1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
Het 10-tallige getal dat daarbij hoort bereken je als volgt:
128 + 32 + 8 + 2 = 170
Hoe zet je een 10-tallig getal om in binair?
Dat gaat precies andersom: dan vul je de tabel juist in.
Voorbeeld: hoe zetten we het getal 200 om in binair?
-
We kijken of het getal groter dan of gelijk aan 27 (128) is. Ja, 200 is groter dan 128, dus vullen we een 1-tje in bij de 128:
| 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
| 1 |
? |
? |
? |
? |
? |
? |
? |
Nu trekken we 128 van 200 af, en we houden 200 - 128 = 72 over.
-
Nu kijken we of het overgebleven getal (72) groter dan of gelijk aan 26 (64) is. Ja, 72 is groter dan 64, dus mogen we ook bij de 64 een 1 invullen.
| 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
| 1 |
1 |
? |
? |
? |
? |
? |
? |
Nu trekken we 64 van 72 af, en we houden 72 - 64 = 8 over.
-
Nu kijken we of het overgebleven getal (8) groter dan of gelijk aan 25 (32) is. Nee, want 8 is kleiner dan 32. Daarom moeten we nu een 0 invullen in de tabel:
| 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
| 1 |
1 |
0 |
? |
? |
? |
? |
? |
Nu hoeven we niets van het getal af te trekken, want we hebben een 0 ingevuld.
-
Nu kijken we of het overgebleven getal (8) groter dan of gelijk aan 24 (16) is. Nee, want 8 is kleiner dan 16. Daarom moeten we nu een 0 invullen in de tabel:
| 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
| 1 |
1 |
0 |
0 |
? |
? |
? |
? |
Nu hoeven we niets van het getal af te trekken, want we hebben een 0 ingevuld.
-
Nu kijken we of het overgebleven getal (8) groter dan of gelijk aan 23 (8) is. Ja, want 8 is precies gelijk aan 8. Nu moeten we dus een 1 invullen:
| 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
| 1 |
1 |
0 |
0 |
1 |
? |
? |
? |
Omdat we een 1 hebben ingevuld, moeten we nu weer 8 van 8 aftrekken. Dan houden we 8 - 8 = 0 over, en zijn we dus klaar. Nu mogen we voor de getallen die we overhebben een 0 invullen:
-
De tabel wordt nu dus als volgt:
| 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
| 1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
Uit die tabel kun je aflezen dat het binaire getal 11001000 is.
Als je niet zeker weet of het klopt kun je het altijd narekenen door het binaire getal weer om te rekenen in het 10-tallige talstelsel:
128 + 64 + 8 = 200
Hier komt weer 200 uit, dus het klopt!
Kommagetallen
In het binair kunnen ook kommagetallen (dit noemen ze floating points, wat staat voor drijvende komma of zwevende komma).
Soms wordt hij ook bijvoorbeeld real, float, single of double genoemd.
Kommagetallen worden vastgelegt zoals een soort wetenschappelijke notatie: teken * mantisse (getal) * 2exponent.
Hierbij is teken -1 of 1 (om aan te geven of het om een positief of negatief getal gaat), de mantisse het getal voor de exponent, en de exponent het getal waarmee 2 moet worden verheft.
Over het algemeen hebben we 2 soorten floating points: enkele precisie (engels: single precision) en dubbele precisie (engels: double precision).
De enkele precisie-variant heeft 32 bits (1 tekenbit, 8 bits voor de exponent en 23 bits voor de mantisse (het getal)), dus 4 bytes.
De dubbele precisie-variant heeft het dubbele daarvan, 64 bits: 1 tekenbit, 11 bits voor de exponent en 52 bits voor het getal, dus bij elkaar 8 bytes.
Het makkelijkst is de tekenbit.
Die is bij zowel enkele precisie als bij dubbele precisie 1 bit.
Het tekenbit gebruik je om aan te geven of het getal positief of negatief is: als het tekenbit 0 is, is het getal positief.
Is het tekenbit 1, dan is het getal negatief.
De exponent is in enkele precisie 8 bits, en in dubbele precisie 11 bits.
Ik leg hier de enkele precisie-variant uit, maar de dubbele precisie werkt precies hetzelfde, hij heeft alleen wat meer bits.
Net heb je geleerd dat bij een getal van 8 bits het getal 0000000 0 is, en het getal 11111111 255 is.
Bij de exponent geldt dat niet, omdat er ook negatieve getallen in moeten kunnen.
Daarom wordt er 127 vanaf getrokken.
Nu is het getal 127 (01111111) dus 0.
Dat betekend dat er dus getallen van -127 (00000000) tot en met +128 (11111111) in kunnen.
De mantisse is het ingewikkeldst. Daar heb ik nu nog geen verhaaltje bij ;-).
Was deze informatie nuttig?
Zo ja, overweeg dan een linkje op uw website te plaatsen:
Bedankt!