# Bits, bytes en wat we eraan hebben

Eens in de zoveel tijd krijgt elke programmeur 'm weer voor de kiezen - de vraag der vragen, over datgene wat iedereen bezighoudt als het om computers gaat: bits, bytes, nullen en enen, wat zijn het en wat heb je eraan? Dat ga ik nu eens haarfijn uitleggen. Technofoben hebben nu nog de kans om af te haken.

# Rijen bits

Iedereen weet dat computers met bits werken - maar wat zijn dat? Een bit is het kleinste stukje informatie dat je kunt bedenken: de waarde kan 0 of 1 zijn, verder niet.

Omdat alleen 0 en 1 alleen weinig rekenmogelijkheden bieden, worden grotere getallen op een slimme manier gecodeerd in rijen van bits. Als je 2 bits hebt, heb je tweemaal 2 oftewel 4 mogelijkheden. Met 2 bits kun je dus bijvoorbeeld de getallen 0, 1, 2 en 3 coderen: de bits "00" komen samen overeen met het getal 0, "01" met 1, "10" met 2 en "11" met 3.

Is die verdeling willekeurig gekozen? Nee, daar zit een logica in. Om van de rij bits naar het getal om te rekenen, vermenigvuldig je het 1e bit met 2 en tel je er het tweede bit bij op:

Bits Omrekening
00 0 * 2 + 0 = 0
01 0 * 2 + 1 = 1
10 1 * 2 + 0 = 2
11 1 * 2 + 1 = 3

Als je er nog een bit voor zet, wat je met 4 vermenigvuldigt, krijg je 2 * 2 * 2 = 8 mogelijkheden (de getallen 0 t/m 7). Een paar voorbeelden:

Bits Omrekening
011 0 * 4 + 1 * 2 + 1 = 3
100 1 * 4 + 0 * 2 + 0 = 4
101 1 * 4 + 0 * 2 + 1 = 5
111 1 * 4 + 1 * 2 + 1 = 7

Zo kun je doorgaan met het toevoegen van bits aan de linkerkant: ieder bit dat je toevoegt, is tweemaal zoveel "waard" (de volgende bits zijn staan dus voor 8, 16, 32, enzovoorts) en verdubbelt daarmee het aantal getallen dat je kunt uitdrukken. Dus "1010" is 8+2=10, "11011" is 16+8+2+1=27, enzovoorts.

# Binaire getallen

In feite kun je zeggen dat in het voorbeeld met 3 bits het eerste bit de "4-tallen" weergeeft, het tweede bit de "2-tallen" en het derde bit de eenheden. Samen vormen ze een binair getal, een getal uitgedrukt in bits. Dit is precies gelijk aan hoe het werkt bij de decimale getallen die we elke dag gebruiken: in het getal 123 geeft het eerste cijfer de 100-tallen, het tweede cijfer de 10-tallen en het laatste cijfer de eenheden. Omdat de mens nu eenmaal 10 vingers heeft, hebben de Arabieren ooit een 10-tallig getallenstelsel bedacht, maar als we maar 2 vingers zouden hebben, zouden we misschien wel alles in het binaire getallenstelsel uitdrukken. Dat zou Sudoku puzzels een stuk minder uitdagend maken:

1 
  

(Een binaire Sudoku: in elke rij en kolom moeten de cijfers 0 en 1 precies 1x voorkomen!)

Hoe lang kan zo'n rij bits worden, en hoeveel getallen kun je ermee uitdrukken? Er is uiteraard geen limiet. In het algemeen geldt dat als je een rij van n bits hebt, je 2n getallen kunt uitdrukken. Dus met 10 bits kun je 210 = 1024 getallen uitdrukken (0 t/m 1023)

# Byte

Een *byte *is een binair getal van precies 8 bits. Een byte kan dus 28 = 256 mogelijke waarden hebben:

00000000 = 0 * 128 + 0 * 64 + ... + 0 * 1 = 0

...

11111111 = 1 * 128 + 1 * 64 + ... + 1 * 1 = 255

Uiteraard kan de computer ook met getallen groter dan 255 rekenen; er worden dan gewoon meerdere bytes gebruikt voor een getal. Gangbaar is bijvoorbeeld 4 bytes (dus 32 bits). Hiermee kunnen we tellen tot 232 = 4,2 miljard, waarmee ik mijn financiële administratie in de nabije toekomst nog wel kan behapstukken.

# Digitaliseren

Hoe worden letters, plaatjes en muziek dan in bits uitgedrukt? De truc is altijd om de informatie die je wilt opslaan eerst om te zetten in getallen (digitaliseren). Elke letter en elk symbool heeft dus een nummer gekregen. De hoofdletter 'A' is bijvoorbeeld nummer 65, en het cijfer '1' is nummer 49. Bij plaatjes krijgt elke kleur een getal (eigenlijk drie getallen, voor de drie kleurcomponenten), en bij muziek wordt in feite de beweging van de speakerconus door getallen benaderd (duizenden getallen per seconde, zodat ook trillingen met een hoge frequentie kunnen worden uitgedrukt).

Oja, en wat heb je aan al deze informatie? Niets, tenzij je in de computerij werkt of de b(l)its wilt maken op feestjes.