Binaire reeksen

Op deze pagina, ga je leren over hoe informatie wordt weergegeven in computers als reeksen van bits.

In veel programmeertalen is het een gewoonte dat elk stuk tekst eindigt op een null -byte: een byte waarin alle acht bits nul zijn. Deze null-byte wordt alleen gebruikt voor dit doel, om het einde van een tekst aan te geven. Dus de titel "De Schoonheid en Vreugde van Programmeren" op de hoofdpagina gebruikt eigenlijk 42 bytes.

Tot nu toe hebben we met kleine stukjes data gewerkt, van Boolean waardes (één bit) tot tekens (acht bits). Maar sommige informatie op je computer of smartphone is natuurlijk veel groter dan dat. Om te beginnen worden tekens over het algemeen niet één voor één gebruikt; ze worden gebruikt in tekstreeksen zoals "De Schoonheid en Vreugde van Programmeren" Deze 41 tekens beslaan 41 bytes computergeheugen. Maar de echte kampioenen van geheugengebruik zijn mediabestanden: afbeeldingen, geluid (meestal muziek) en video.

Als we in de bits van het geheugen kunnen kijken, zou een gedeelte van het geheugen er ongeveer zo uitzien:

01000001001000000111001101101101011000010111001001110100001000000111000001101000011011110110111001100101001011000010000001101100011010010110101101100101001000000111100101101111011101010111001000100000011011000110000101110000011101000110111101110000001000000110111101110010001000000110010001100101011100110110101101110100011011110111000000100000011000110110111101101101011100000111010101110100011001010111001000101100001000000110001101100001011011100

Een binaire reeks (ookwel een bitstream genoemd) is een reeks nullen en enen.

De reeks enen en nullen hierboven zijn slechts 449 bits. Een mobiele telefoon van 16 GB heeft zestien gigabyte (ongeveer 16 miljard bytes) aan geheugen, waar elke elke byte weer 8 bits bevat. Dat zijn 128.000.000.000 bits. Gedrukt op papier als enen en nullen, zou het geheugen van een 16 GB-telefoon bijna 40.000.000 pagina's in beslag nemen! De opgeslagen informatie, of het nu een SMS-bericht, een foto, een liedje, een computerprogramma of een lijst met telefoonnummers is, het ziet er allemaal precies hetzelfde uit: een reeks bits die Aan of Uit zijn (1 of 0).

Groottes

Hier zijn een paar ruwe voorbeelden van hoeveel geheugen nodig is voor bepaalde gegevens:

naam hoeveelheid voorbeeld
bit 1 of 0 1
byte 8 bits 11011001
kilobyte 210 (1.024) bytes een aantal alinea's
megabyte 220 (1.048.576) bytes ongeveer 1 boek
gigabyte 230 (1.073.741.824) bytes iets meer dan 1 CD
terabyte 240 (1.099.511.627.776) bytes ongeveer 1.500 CDs
petabyte 250 (1.125.899.906.842.624) bytes ongeveer 20 miljoen kasten met tekst
exabyte 260 (1.152.921.504.606.846.976) bytes ongeveer 20% van alle woorden ooit uitgesproken

In 2020, is het gebruikelijk om een terabyte-geheugenschijf op je bureau te hebben. Webservices verwerken petabytes of exabytes aan gegevens.

Waar komen deze voorvoegsels zoals "tera-" en "peta-" vandaan?

Wanneer we grote getallen schrijven, plaatsen we komma's om de drie cijfers (geteld vanaf de rechterkant). Elke groep van drie heeft een naam: duizend, miljoen, miljard, enzovoort. Het getal 1.234.567.890 wordt dus uitgesproken als "één miljard tweehonderdvierendertig miljoen vijfhonderdzevenenzestigduizend achthonderdnegentig". Die groepsnamen ("duizend" enzovoort) hebben ook voorvoegsels die worden gebruikt in metrische metingen:

voorvoegsel hoeveelheid hoeveelheid als getal
kilo- duizend 1.000
mega- miljoen 1.000.000
giga- miljard 1.000.000.000
tera- biljoen
(een miljoen miljoen)
1.000.000.000.000
peta- biljard 1.000.000.000.000.000
exa- triljoen
(een miljard miljard)
1.000.000.000.000.000.000

Cijfers voor getallen minder dan 1 (breuken) hebben ook voorvoegsels:

voorvoegsel hoeveelheid hoeveelheid als breuk
milli- duizendste 1/1.000
micro- miljoenste 1/1.000.000
nano- miljardste 1/1.000.000.000
pico- biljoenste 1/1.000.000.000.000
femto- biljardste 1/1.000.000.000.000.000
atto- triljoenste 1/1.000.000.000.000.000.000

De breuknamen worden gebruikt om tijden in de computer te meten, zoals een nanoseconde geheugentoegangstijd, of afstanden tussen draden op een chip, die worden gemeten in nanometers.

"Binaire reeks" is een brede categorie en vaak zijn er meerdere abstractieniveau's bovenop gebouwd. Je kan bijvoorbeeld een afbeelding in een e-mail of een tekstbericht plaatsen, in dat geval bevat het bericht een afbeelding wat een soort bestand is, wat een bitstream is.

  1. Geen Afbeelding

    Bekijk de drie volgende blokken; deze zul je gebruiken om binaire reeksen te verkennen:

    • Een resultaat-blok dat een stuk tekst als invoer neemt en het vertaalt naar een binaire reeks:
      Geen Afbeelding
    • Een resultaat-blok dat een binaire reeks als invoer neemt en het naar tekst vertaalt:
      Geen Afbeelding
    • Je kan het tweede en derde invoerveld gebruiken om respectievelijk te bepalen waar het blok op een nieuwe regel begint en om de grootte van de getekende afbeelding te bepalen.
      Een commando-blok dat een binaire reeks als invoer neemt en er een zwart-wit plaatje mee tekent in het speelveld, met voor iedere 0 een witte pixel en voor iedere 1 een zwarte.
      Geen Afbeelding

  2. Het vertalen van een kort stukje tekst naar een binaire reeks.
      De aanhalingstekens vertellen aan Snap! dat de binaire reeks moet worden opgeslagen zoals hij ingevoerd is. Zonder de aanhalingstekens ziet Snap! de binaire reeks als een nummer, waardoor het de nullen aan het begin van de reeks zou verwijderen. Zonder die nullen verandert de betekenis van de binaire reeks.
    • Vind de maak (uitvoer) naar... instructie en verander de tekstinvoer naar een kort stukje tekst naar keuze. De gerapporteerde binaire reeks zal worden opgeslagen in de uitvoer-variabele met aanhalingstekens aan weerszijden.
      Geen Afbeelding
    • De uitvoer is te zien met een rechtermuisklik of Ctrl-klik op de UITVOER-kijker rechtsboven in het speelveld en door daarna te klikken op "export..." zal de binaire reeks als een tekstdocument gedownload worden. Kopieer enkel de binaire reeks uit het bestand, niet de aanhalingstekens.
      Geen Afbeelding
  3. Zelfs Snap! heeft bugs. Wanneer je data in Snap! plakt kan de tekst buiten de randen van het invoerveld vallen. De makers van Snap! proberen dit probleem nog op te lossen.
    Geen Afbeelding
  4. Plak de binaire reeks van de uitvoer in het vertaal binaire reeks naar tekst blok en voer het geheel uit (dit kan even duren).
    • Is de uitvoer gelijk aan je oorspronkelijke ingevoerde tekst? (Zo niet, dan kan het zijn dat je de aanhalingstekens hebt meegekopieerd of dat je een bit gaandeweg verloren bent.)
    • Als je de tekst correct teruggekregen hebt, probeer dan wat aanpassingen te maken aan de binaire reeks:
      • Wat gebeurt er met de tekst als je één bit aanpast?
      • En wat gebeurt er als je ergens midden in de reeks een bit toevoegt?
      • En wat als je er een aan het begin toevoegt?
  5. Ga terug naar je geëxporteerde tekstbestand en kopieer je oorspronkelijke binaire reeks opnieuw (zonder de aanhalingstekens). Plak dit vervolgens in het vertaal binaire reeks naar zwart-witte afbeelding blok en voer het uit. De kans is echter klein dat je iets zinvols ziet. Waarom is dit zo?
  6. Plak de onderstaande binaire reeks in vertaal binaire reeks naar zwart-witte afbeelding met 28 pixels ingesteld in het tweede invoerveld:

    0011110000000000000000000000001001000110000000110000000001111011111001100101000000000100100001001010100000000000100010000101001010000000000010010000101001010000000000001110000010101001011000100000100001010011000110000110010000000111000000000000110011001100001000001001100011001000100000000000110110011001100010000000000100111101100110000100000000100011111100110000010000000100011011110011000000100000100001101110001000000001111100000100011001100011000000000000110001100111111000000000000011000010111110000000000000000000000011100000

    De uitvoer hiervan zou eruit moeten zien als het BJC-logo:
    Geen Afbeelding
  7. Wat gebeurt er als je diezelfde binaire reeks naar tekst vertaalt? Waarom denk je dat dit gebeurt?

Dus als afbeeldingen, muziek en woorden er allemaal hetzelfde uitzien (allemaal binaire reeksen) in het geheugen, hoe kan het dan dat de computer ze van elkaar kan onderscheiden? Stel dat je de binaire reeks 01000001 in het geheugen hebt: hoe zou deze dan geïnterpreteerd moeten worden? Als het nummer 65, of eerder de letter A? Of misschien een tint in donkerrood, of misschien zelfs nog iets anders..?

De betekenis van een binaire reeks hangt af van de context waarin hij gebruikt wordt. Maar wat is die "context" eigenlijk? En hoe weet een programmeertaal hoe hij een ingevoerd stuk tekst moet interpreteren? Of het een heel getal, een stukje tekst, een afbeelding of iets anders is, daar kan de taal achter komen dankzij een ander stukje van de reeks. Dat stukje vertelt het programma wat het data type van die reeks is.

Je weet al dat er verschillen zitten tussen programmeertalen één van deze verschillen is hun gebruik van de data-types.

In programmeertalen van hoger niveau, zit de code voor het soort data-type vast aan de waarde. De programmeertaal ziet dan aan de waarde wat het data-type is, als je bijvoorbeeld een variabele de waarde 4.0 geeft, dan koppelt de programmeertaal daar het data-type "komma-getal" aan. Wanneer je variabelen aanmaakt in talen van lager niveau moet je zelf naast de waarde ook het data-type van een variabele vertellen.

Snap! heeft voordelen die veel andere talen niet hebben en het is zeer waarschijnlijk dat je volgende informaticacursus een andere programmeertaal zal gebruiken.

  1. Een bepaald online verkoopbedrijf gebruikt binaire reeksen van 9 bits om ieder product dat verkocht wordt te identificeren. Omdat verwacht wordt dat het het aantal verkochte producten zal stijgen, wil het bedrijf binaire reeksen van 10 bits gaan gebruiken. Welke van de onderstaande stellingen hieronder beschrijven het beste de gevolgen van de 9-bit reeksen vervangen door 10-bit reeksen?
    Er kunnen twee producten meer geïdentificeerd worden.
    Er kunnen tien producten meer geïdentificeerd worden.
    Er kunnen twee keer zoveel producten geïdentificeerd worden.
    Er kunnen tien keer zoveel producten geïdentificeerd worden.
  1. Kijk in de vertaal tekst naar binaire reeks en vertaal binaire reeks naar tekst-resultaatblokken. Beschrijf hoe deze twee resultaatblokken werken. Er zitten meerdere zelf gemaakte blokken in:
    • pack 8-bit byte neemt een binaire reeks van 8 bits of minder als invoer en voegt genoeg nullen toe aan het begin om een hele byte te maken. Hoe wordt dit gebruikt?
    • translate decimal to binary neemt een decimale waarde (een normaal getal) als invoer en vertaalt het naar de binaire variant van dat getal. Dit blok gebruikt recursie. Waarom is recursie hier handig?
    • translate text to Unicode list neemt een stukje tekst als invoer en geeft een lijst met Unicode-waardes van ieder karakter terug. Waarom is het handig om hier een lijst te gebruiken, denk je?
Terug Volgende