Positiestelsels en binaire getallen

Een getal en de manier waarop je het opschrijft

OpmerkingLeerdoelen

Na deze les kan je:

  • uitleggen hoe de positie van een cijfer zijn waarde bepaalt in een stelsel met basis \(b\)
  • verklaren waarom een computer met twee toestanden werkt
  • de opbouw van een binair getal beschrijven, en eraan zien of het even is en of het een macht van twee is

In deze les kijken we naar de manier waarop een getal opgeschreven wordt. We beginnen bij de notatie die je zelf gebruikt, veralgemenen die naar andere basissen, en komen zo uit bij het binaire stelsel waarmee elke computer werkt. Rekenen doen we in de volgende les.

1 Een getal en zijn notatie

Twee woorden die vaak door elkaar gebruikt worden, houden we hier uit elkaar. Een cijfer is een symbool dat je schrijft, zoals \(4\) of \(7\). Een getal is de hoeveelheid die je ermee bedoelt. Met tien cijfersymbolen schrijven wij elk getal op dat we nodig hebben, hoe groot ook.

Dat een getal en zijn notatie niet hetzelfde zijn, zie je aan het volgende rijtje: vier streepjes in de kantlijn, de letters \(\text{IV}\) op een wijzerplaat, het woord vier, en het cijfer \(4\). Die vier dingen zien er verschillend uit en duiden hetzelfde aantal aan. Dat onderscheid loopt door de hele les, want een computer gebruikt een andere notatie dan wij en duidt er dezelfde getallen mee aan.

Niet elke notatie is even bruikbaar. Neem de Romeinse cijfers en probeer \(\text{XLVII} \cdot \text{VI}\) uit te rekenen zonder eerst naar onze eigen cijfers om te zetten. De manier waarop je dat in de lagere school geleerd hebt, de twee getallen onder elkaar zetten en cijfer per cijfer vermenigvuldigen, werkt hier niet. In \(\text{XLVII}\) draagt geen enkele letter betekenis door de plaats die ze inneemt: de \(\text{X}\) staat voor tien, waar hij ook staat. Zonder plaatswaarde zijn er ook geen kolommen om onder elkaar te zetten, en dus is er geen manier om het product cijfer per cijfer op te bouwen. Wie in dit stelsel wil vermenigvuldigen, moet elk product uit het hoofd kennen of terugvallen op herhaald optellen.

Onze eigen notatie doet het anders. Ze heet het decimale stelsel, naar het Latijnse woord voor tien, en ze werkt met tien cijfersymbolen, \(0\) tot en met \(9\). Telkens wanneer hieronder over “ons stelsel” of over “decimaal” gesproken wordt, gaat het daarover. Hoe dat stelsel precies werkt, is de moeite om even uit te schrijven, ook al gebruik je het al jaren.

2 Het decimale stelsel, uitgeschreven

Neem het getal \(5074\). Wat daar staat, is dit:

\[ 5074 = 5 \cdot 10^3 + 0 \cdot 10^2 + 7 \cdot 10^1 + 4 \cdot 10^0 \]

De exponenten lopen van rechts naar links op, beginnend bij nul. Dat is meteen de nummering van de posities.

Twee eigenschappen maken deze notatie zo bruikbaar. Ten eerste draagt de positie betekenis. De \(5\) staat voor vijfduizend, enkel door de plaats die ze inneemt. Ten tweede houdt de nul haar plaats bezet. Zonder een symbool voor “hier zit niets” zou \(5074\) niet van \(574\) te onderscheiden zijn.

Aan het getal tien is in deze opbouw niets bijzonders. Tien is het grondtal van de machten, en dat is de enige rol die het speelt. Vervang het door een ander getal en je krijgt een ander stelsel dat even goed werkt.

3 Andere basissen

Het grondtal van een stelsel heet ook de basis. Ons stelsel heeft basis tien, en die basis bepaalt meteen hoeveel cijfersymbolen je nodig hebt: precies tien, namelijk \(0\) tot en met \(9\).

Stel nu dat je slechts zeven cijfersymbolen ter beschikking had, \(0\) tot en met \(6\). Tot zes kan je gewoon tellen. Voor zeven is er geen symbool meer, en dus doe je wat je decimaal bij tien ook doet: je begint aan een nieuwe positie en schrijft \(10\).

Dat levert meteen een probleem op. Er staat \(10\) op het blad, en dat kan zeven betekenen of tien, afhankelijk van welk stelsel bedoeld is. Daarom schrijven we de basis erbij als een klein cijfer rechtsonder, een index. In basis zeven schrijven we zeven dus als \(10_7\). Die kleine zeven maakt geen deel uit van het getal en zegt enkel in welk stelsel je het moet lezen. Bij decimale getallen laten we de index weg, want dat is de standaard: \(1010\) betekent duizend-en-tien, terwijl \(1010_2\) het getal tien betekent.

Uit het voorbeeld volgt een eigenschap die in elk stelsel geldt. \(10\) is altijd de schrijfwijze van de basis zelf. Wie \(10\) op een blad ziet staan zonder te weten in welk stelsel gewerkt wordt, weet dus enkel dat het om de basis gaat en niet welk getal daarachter zit. Op dezelfde manier is \(100\) altijd het kwadraat van de basis.

4 De algemene regel

Kies een basis \(b\) en neem een rij van \(n\) cijfers, genummerd van rechts naar links vanaf positie \(0\):

\[ a_{n-1} \, a_{n-2} \, \ldots \, a_1 \, a_0 . \]

Elk cijfer \(a_i\) ligt tussen \(0\) en \(b-1\). Die rij stelt het getal

\[ a_{n-1} \cdot b^{n-1} + a_{n-2} \cdot b^{n-2} + \ldots + a_1 \cdot b^1 + a_0 \cdot b^0 \]

voor. Elk cijfer wordt dus vermenigvuldigd met de basis tot de macht van zijn eigen positie, en al die resultaten worden opgeteld. Dat is precies wat je hierboven bij \(5074\) gedaan hebt, met \(b = 10\) en \(n = 4\).

Zo’n som wordt vaak korter geschreven met het teken \(\sum\), de Griekse hoofdletter sigma:

\[ \sum_{i=0}^{n-1} a_i b^i . \]

Die notatie zegt het volgende: laat \(i\) alle gehele waarden doorlopen van \(0\) tot en met \(n-1\), reken telkens \(a_i b^i\) uit, en tel al die uitkomsten op. De twee schrijfwijzen betekenen dus hetzelfde, de tweede is enkel korter.

Blijft de vraag waarom je precies \(b\) cijfersymbolen nodig hebt en geen ander aantal. Kijk naar het cijfer helemaal rechts, \(a_0\). Elke andere term in de som bevat minstens één factor \(b\) en is dus deelbaar door \(b\), terwijl \(a_0\) dat niet is. Bij deling door \(b\) zijn er precies \(b\) mogelijke resten, namelijk \(0\) tot en met \(b-1\), en \(a_0\) moet ze allemaal kunnen aanduiden. Vandaar \(b\) symbolen.

Twee voorbeelden. In basis vijf is

\[ 342_5 = 3 \cdot 5^2 + 4 \cdot 5^1 + 2 \cdot 5^0 = 75 + 20 + 2 = 97 . \]

In basis twaalf zijn twaalf cijfersymbolen nodig, en na de \(9\) zijn onze cijfers op. Men werkt daar met letters verder, waarbij \(A\) tien is en \(B\) elf. Zo is \(2A_{12} = 2 \cdot 12 + 10 = 34\).

Tot slot: hoe klein mag een basis zijn? Basis één zou één cijfersymbool hebben, de \(0\), en met alleen nullen valt geen enkel getal van een ander te onderscheiden. Vanaf twee lukt het wel. De kleinste bruikbare basis is dus twee. De streepjes in de kantlijn waarmee deze les begon, vormen trouwens geen tegenvoorbeeld: daar telt de plaats van een streepje niet mee, enkel het aantal, en dus is het geen positiestelsel.

5 Waarom een computer met twee werkt

Van alle mogelijke basissen beheerst er één de informatica, en het is de kleinste die er is, namelijk twee. De reden is niet wiskundig, want alles hierboven geldt voor elke basis vanaf twee. De reden is fysisch.

Een computer is opgebouwd uit schakelingen, kleine stukjes elektronica die elk één cijfer vasthouden en doorgeven. Zo’n schakeling bewaart dat cijfer niet als een symbool maar als een spanning, een elektrisch verschil dat je in volt uitdrukt, ongeveer zoals het verschil tussen de twee polen van een batterij. Om het cijfer terug te lezen, meet de schakeling die spanning en beslist ze welk cijfer erbij hoort.

Het lastige is dat zo’n spanning schommelt, door temperatuur, veroudering en storing van andere onderdelen. Verdeel je \(3{,}3\) volt over twee niveaus, dan geldt alles onder \(1{,}65\) volt als een \(0\) en alles daarboven als een \(1\). Een afwijking van een halve volt verandert daar niets aan. Verdeel je diezelfde \(3{,}3\) volt over tien niveaus, dan zit er nog \(0{,}33\) volt tussen twee opeenvolgende cijfers, en leveren diezelfde kleine storingen meteen leesfouten op.

Twee toestanden geven dus de ruimste marge, en die marge blijft nodig, ook bij een miljard metingen per seconde.

6 Binaire getallen

Basis twee heeft twee cijfersymbolen, \(0\) en \(1\), en elke positie is een macht van twee waard. Dat stelsel heet het binaire stelsel, en één cijfer erin heet een bit, samengetrokken uit het Engelse binary digit.

Tellen gaat zoals altijd, al zijn de symbolen sneller op. Na \(1\) volgt niet \(2\) maar \(10\).

decimaal \(0\) \(1\) \(2\) \(3\) \(4\) \(5\) \(6\) \(7\) \(8\)
binair \(0\) \(1\) \(10\) \(11\) \(100\) \(101\) \(110\) \(111\) \(1000\)

Uitgeschreven werkt basis twee precies zoals de algemene regel voorschrijft, met \(b = 2\). Een rij van \(n\) bits stelt dus het getal

\[ \sum_{i=0}^{n-1} a_i 2^i \]

voor, waarbij elke \(a_i\) gelijk is aan \(0\) of aan \(1\). Aan die formule hangen drie eigenschappen die je vaak zal gebruiken.

De eerste gaat over even en oneven. Elke term \(a_i 2^i\) met \(i \geq 1\) is even, want er zit minstens één factor \(2\) in. Alleen de laatste term, \(a_0 \cdot 2^0\), kan dus voor oneven zorgen. Een binair getal is bijgevolg even precies wanneer het op een \(0\) eindigt, en dat zie je aan één cijfer.

De tweede. Schrijf rechts van \(1011_2\) een \(0\) bij en je krijgt \(10110_2\). Elk bit is een positie opgeschoven, dus elke macht is verdubbeld, en de waarde is maal twee gegaan: \(11\) wordt \(22\). Decimaal levert een nul bijschrijven hetzelfde op, zij het maal tien. Een computer vermenigvuldigt met twee door alle bits een plaats op te schuiven, en goedkoper dan dat wordt een bewerking niet.

De derde gaat over een rij van enkel enen. Reken \(1111_2\) uit en je krijgt \(1 + 2 + 4 + 8 = 15\), terwijl \(2^4 = 16\). Dat is geen toeval, want

\[ 1 + 2 + 4 + \ldots + 2^{n-1} = 2^n - 1 . \]

Een rij van \(n\) enen komt dus altijd precies één tekort voor \(2^n\). Voor acht bits geldt \(11111111_2 = 255\) terwijl \(2^8 = 256\). Onthoud dit resultaat, want in de derde les van deze reeks hangt er een beruchte softwarefout aan vast.

7 Conclusie

Een getal en zijn notatie staan los van elkaar. De keuze van een basis bepaalt hoe je een getal opschrijft, niet welk getal het is, en een computer kiest twee om een fysische reden.

Je kan het binaire stelsel nu lezen: je weet wat elke positie waard is, waarom er precies twee cijfersymbolen zijn, en wat een rij enen samen oplevert. In de volgende les ga je ermee werken. Getallen omzetten in beide richtingen, twee binaire getallen optellen, en de bits samennemen tot grotere eenheden.

\[ a_{n-1} x^{n-1} + \ldots + a_1 x + a_0 \qquad \text{en} \qquad a_{n-1} b^{n-1} + \ldots + a_1 b + a_0 \]

Een getal in basis \(b\) opschrijven is een veelterm invullen in \(x = b\), met de cijfers tussen \(0\) en \(b-1\) als coëfficiënten. Zo is \(5074\) de veelterm \(5x^3 + 0x^2 + 7x + 4\) in \(x = 10\).

\[ \begin{array}{r|rrrr} & 5 & 0 & 7 & 4 \\ \times \, 10 & & 50 & 500 & 5070 \\ \hline & 5 & 50 & 507 & 5074 \end{array} \]

Van links naar rechts vermenigvuldig je dus telkens met de basis en tel je het volgende cijfer erbij, tot de rij op is. Dat is het schema van Horner. Dat ook de staartdeling van getallen en de deling van veeltermen dezelfde stappen volgen, is dan geen toeval meer.

\[ \begin{array}{r|c|c} & \text{quotiënt} & \text{rest} \\ \hline (5x^3 + 0x^2 + 7x + 4) : x & 5x^2 + 0x + 7 & 4 \\ 5074 : 10 & 507 & 4 \end{array} \]

8 Begrippen

  • cijfer: een symbool dat je schrijft, zoals \(4\) of \(B\).
  • getal: de hoeveelheid die een rij cijfers aanduidt.
  • decimaal stelsel: ons eigen stelsel, met basis tien en tien cijfersymbolen.
  • basis: het grondtal van de machten in een stelsel, en meteen het aantal cijfersymbolen dat je nodig hebt.
  • positie: de plaats van een cijfer in de rij, van rechts naar links genummerd vanaf \(0\).
  • index: het kleine cijfer rechtsonder een getal, dat aangeeft in welke basis je het moet lezen, zoals in \(1010_2\).
  • binair stelsel: het stelsel met basis twee.
  • bit: één cijfer in het binaire stelsel, dus een \(0\) of een \(1\).

9 Oefeningen

  1. Welk getal is \(100_b\), voor een willekeurige basis \(b\)? En welk getal is \(11_b\)?

    \(100_b = 1 \cdot b^2 = b^2\), het kwadraat van de basis. En \(11_b = 1 \cdot b + 1 = b + 1\).

  2. Hoeveel verschillende getallen kan je met zes bits schrijven, en welke zijn dat?

    \(2^6 = 64\) getallen, namelijk \(0\) tot en met \(63\). Elk van de zes posities heeft twee mogelijkheden, en elke combinatie levert een ander getal op.

  3. Hoe zie je aan de binaire schrijfwijze meteen dat een getal een macht van twee is?

    Er staat precies één \(1\) in. Een macht van twee bestaat uit één enkele term \(2^i\), dus alleen dat ene bit staat aan.