Op deze pagina, ga je leren over hoe informatie wordt weergegeven in computers als reeksen van bits.
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).
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.
Bekijk de drie volgende blokken; deze zul je gebruiken om binaire reeksen te verkennen:
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.
vertaal binaire reeks naar tekst
blok en
voer het geheel uit (dit kan even duren).
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?
vertaal binaire reeks naar
zwart-witte afbeelding
met 28 pixels ingesteld in het tweede invoerveld:
0011110000000000000000000000001001000110000000110000000001111011111001100101000000000100100001001010100000000000100010000101001010000000000010010000101001010000000000001110000010101001011000100000100001010011000110000110010000000111000000000000110011001100001000001001100011001000100000000000110110011001100010000000000100111101100110000100000000100011111100110000010000000100011011110011000000100000100001101110001000000001111100000100011001100011000000000000110001100111111000000000000011000010111110000000000000000000000011100000
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.
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.
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?