- Leren
- Informatica & ICT
- Informatica
- Informatica: hoe computers, data, algoritmen en internet werken
- Binaire getallen en gegevensrepresentatie
Binaire getallen en gegevensrepresentatie
BeginnerLes 2 van 7 in Cursus Informatica: hoe computers, data, algoritmen en internet werken
Wat je leert
- Leg uit hoe groepen bits informatie coderen en reken gehele getallen om tussen het decimale, binaire en hexadecimale talstelsel.
- Leg uit wat bits en bytes zijn en hoeveel waarden je met een groep bits kunt weergevenBeschrijf bits en bytes, bereken hoeveel patronen een aantal bits oplevert en lees opslag- en snelheidseenheden correct.
- Reken gehele getallen om tussen het decimale en het binaire talstelselGebruik plaatswaarden om binaire getallen te lezen en reken decimale gehele getallen met twee betrouwbare methoden om naar binair.
- Gebruik hexadecimale notatie als verkorte binaire notatieReken om tussen het hexadecimale, binaire en decimale talstelsel en leg uit waarom programmeurs bytes, kleuren en adressen hexadecimaal schrijven.
- Leg uit wat bits en bytes zijn en hoeveel waarden je met een groep bits kunt weergeven
- Sla niet-negatieve en negatieve gehele getallen op in een vast aantal bits, bepaal hun bereik en leg uit wat er gebeurt als een waarde niet past.
- Sla gehele getallen zonder teken op en herken hun bereikGeef niet-negatieve gehele getallen weer met een vaste bitbreedte, kies een breedte waarin de waarden passen en leg overloop uit.
- Geef negatieve gehele getallen weer in tweecomplementLees en schrijf negatieve gehele getallen in tweecomplement, bepaal het bereik van een bitbreedte met teken en vergelijk dit met teken-grootterepresentatie.
- Sla gehele getallen zonder teken op en herken hun bereik
- Schrijf breuken binair, codeer en decodeer getallen in de IEEE 754-formaten voor drijvendekommagetallen en leg de grenzen van hun bereik en precisie uit.
- Schrijf breuken binair en ontdek waarom je sommige niet exact kunt weergevenReken om tussen decimale en binaire breuken, herken repeterende binaire breuken zoals 0,1 en beschrijf getallen in vastekommarepresentatie.
- Codeer en decodeer drijvendekommagetallen volgens IEEE 754Gebruik binaire wetenschappelijke notatie en de velden voor teken, exponent en fractie van de IEEE 754-formaten met enkele en dubbele precisie.
- Leg bereik, precisie en afrondingsfouten bij drijvendekommarepresentatie uitLeg uit waarom drijvendekommawaarden benaderingen zijn, voorspel typische effecten zoals 0,1 + 0,2 en kies een geschikt getaltype.
- Schrijf breuken binair en ontdek waarom je sommige niet exact kunt weergeven
- Leg uit hoe tekens getallen en bytes worden, gebruik ASCII en Unicode en voorspel hoeveel bytes UTF-8-tekst nodig heeft.
- Codeer tekst met tekencodes en ASCIIGebruik een tekencodetabel om tekst om te zetten in getallen en bits, lees de indeling van ASCII en leg de beperkingen ervan uit.
- Gebruik Unicode-codepunten en UTF-8-coderingMaak onderscheid tussen een Unicode-codepunt en de gecodeerde bytes, codeer tekens in UTF-8 en leg verminkte tekst en aantallen bytes uit.
- Codeer tekst met tekencodes en ASCII
- Beschrijf hoe afbeeldingen worden omgezet in pixels en kleurwaarden, bereken de benodigde opslagruimte en leg uit hoe geluid wordt bemonsterd tot getallen.
- Geef afbeeldingen weer met pixels en kleurwaardenBeschrijf rasterafbeeldingen, kleurdiepte, RGB en hexadecimale kleurcodes, kleurenpaletten en transparantie.
- Bereken de bestandsgrootte van afbeeldingen en vergelijk rasterafbeeldingen met vectorafbeeldingenBereken de opslagruimte die een ongecomprimeerde afbeelding of video nodig heeft, leg uit wat bestanden toevoegen en beschrijf vectorafbeeldingen.
- Digitaliseer geluid door te bemonsteren en te kwantiserenLeg bemonstering, bemonsteringsfrequentie en bitdiepte uit, pas de bemonsteringsregel toe en bereken de grootte van ongecomprimeerde audio.
- Geef afbeeldingen weer met pixels en kleurwaarden
- Leg uit hoe compressie gegevens kleiner maakt, pas eenvoudige verliesloze methoden toe en kies tussen formaten met en zonder verlies.
- Leg verliesloze compressie uit met run-length encoding en andere coderingenPas run-length encoding en codes met variabele lengte toe, beschrijf woordenboekmethoden en leg uit waarom geen enkele methode elk bestand kleiner maakt.
- Leg compressie met verlies uit en kies een geschikt bestandsformaatBeschrijf hoe compressie met verlies minder opvallende details weglaat, weeg kwaliteit af tegen grootte en kies formaten voor verschillende soorten gegevens.
- Leg verliesloze compressie uit met run-length encoding en andere coderingen
Binaire getallen en gegevensrepresentatie: uitleg
1Tel patronen en reken om tussen talstelsels
Een computer kan dezelfde groep bits gebruiken voor een getal, een letter of een deel van een afbeelding. De interpretatie geeft het patroon zijn betekenis. Voordat je met die interpretaties werkt, moet je de beschikbare patronen kunnen tellen en de eenheden voor opslag en overdracht kunnen lezen. Het decimale, binaire en hexadecimale talstelsel geven je vervolgens drie manieren om een geheel getal te schrijven, elk met plaatswaarden die omrekeningen voorspelbaar maken.
1.1 Bits, bytes en opslageenheden
Een bit, een afkorting van binary digit, heeft een van twee waarden: 0 of 1. Hardware kan twee fysische toestanden betrouwbaar onderscheiden, zoals hoge en lage spanning, tegengestelde magnetisatierichtingen, of licht en geen licht. De geschreven cijfers beschrijven die toestanden; ze hoeven niet letterlijk in een apparaat voor te komen.
Tel de patronen
Elke nieuwe bit verdubbelt het aantal mogelijkheden. Twee bits hebben vier patronen: 00, 01, 10 en 11. Drie bits hebben er acht. In het algemeen geven bits patronen. Een nibble is 4 bits en een byte is 8 bits, dus heeft een byte 256 patronen. Een byte is op de meeste moderne computers ook de kleinste adresseerbare geheugeneenheid.
Om een verzameling waarden te coderen, kies je genoeg patronen voor elk element. Voor 26 letters geven vier bits maar 16 patronen; vijf bits geven er 32, dus zijn vijf bits genoeg. Voor 1.000 waarden geven negen bits 512 patronen en tien bits 1.024. Ongebruikte patronen zijn toegestaan. Met 16 bits zijn er 65.536 patronen en met 32 bits zijn er 4.294.967.296.
Het aantal patronen verschilt van het grootste getal zonder teken. Vier bits bieden 16 patronen, maar het tellen begint bij nul, dus lopen de waarden van 0 tot en met 15. Eén patroon wordt al voor nul gebruikt.
Om de minimale bitbreedte systematisch te bepalen, vergelijk je opeenvolgende machten van twee met het benodigde aantal mogelijkheden. Stop bij de eerste macht die groot genoeg is. De toets is voor N verschillende waarden. Precieze gelijkheid is toegestaan: acht mogelijkheden passen in drie bits, terwijl een negende mogelijkheid een vierde bit vereist. Een grotere breedte werkt ook, maar is niet meer het minimum.
Geef het patroon betekenis
De byte 01000001 kan het gehele getal 65 betekenen, de ASCII-letter “A” of een kleurkanaalintensiteit van 65 op een schaal van 0–255. De bits alleen bepalen niet welke interpretatie geldt. Het gegevenstype van een programma en het formaat van het bestand bepalen hoe je ze interpreteert.
Lees opslageenheden
Twee families van voorvoegsels zijn gangbaar:
| Decimale opslag | Bytes | Binaire opslag | Bytes |
|---|---|---|---|
| 1 kB | 1.000 | 1 KiB | 1.024 |
| 1 MB | 1.000.000 | 1 MiB | 1.048.576 |
| 1 GB | 1.000.000.000 | 1 GiB | 1.073.741.824 |
De decimale voorvoegsels zijn SI-voorvoegsels; de binaire voorvoegsels zijn IEC-voorvoegsels. Bij elke decimale stap wordt de eenheid 1.000 keer zo groot; bij elke binaire stap wordt die 1.024 keer zo groot. Om bytes in een grotere eenheid uit te drukken, deel je door het aantal bytes in die eenheid.
Een schijf met het label 500 GB bevat 500.000.000.000 bytes. Gedeeld door 1.073.741.824 is dat ongeveer 465,66 GiB. Software kan die binaire hoeveelheid “GB” noemen, waardoor de weergegeven capaciteit kleiner lijkt. De verandering van eenheid zelf heeft geen bytes verwijderd; formattering en systeembestanden staan daar los van.
Maak onderscheid tussen bits en bytes
Een kleine letter b betekent bit; een hoofdletter B betekent byte. Een verbinding van 100 Mbit/s draagt elke seconde maximaal 100 miljoen bits over. Gedeeld door 8 is dat 12,5 miljoen bytes per seconde, oftewel 12,5 MB/s, vóór protocoloverhead. Als je die snelheid als 100 MB/s leest, maak je die acht keer te groot.
Belangrijkste punten
- Een byte heeft 8 bits; een nibble heeft er 4.
- Elke extra bit verdubbelt het aantal patronen.
- Kies het kleinste aantal bits waarvoor de beschikbare patronen alle waarden dekken.
- Een gegevenstype of codering geeft een bitpatroon betekenis.
- SI-voorvoegsels voor opslageenheden gebruiken machten van 10; IEC-voorvoegsels gebruiken machten van 2.
- Deel een bitsnelheid door 8 om de bijbehorende snelheid in bytes te krijgen.
1.2 Binaire plaatswaarde en omrekening
Het binaire talstelsel is een positiestelsel: de waarde van een cijfer hangt af van de plaats waar het staat. Het decimale stelsel gebruikt tien cijfers en machten van 10. Het binaire stelsel gebruikt twee cijfers, 0 en 1, en machten van 2. Om een binair getal te lezen, tel je de plaatswaarden op waar een 1 staat.
Lees een binair geheel getal
Van rechts naar links zijn de plaatswaarden 1, 2, 4, 8, 16, 32, 64, 128, enzovoort. Elke waarde is twee keer zo groot als de vorige, want , en .
Voor zet je de zes bits onder hun plaatswaarden:
| Plaatswaarde | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|
| Bit | 1 | 0 | 1 | 1 | 0 | 1 |
De waarde is . Een nul draagt niets bij, maar houdt de andere cijfers op de juiste plaats. Voorloopnullen veranderen de waarde niet: 00101101 is ook 45.
De meest linkse bit is de meest significante bit, of MSB. De meest rechtse is de minst significante bit, of LSB. Elke plaatswaarde behalve de laatste is even, dus is een binair geheel getal precies dan oneven als de LSB 1 is.
Reken om door machten van twee af te trekken
Om 156 binair te schrijven, begin je met de grootste macht van twee die past: 128. Trek die af; er blijft 28 over. De plaatswaarden 64 en 32 passen niet, dus krijgen beide een 0. Neem 16, waarna 12 overblijft; neem 8, waarna 4 overblijft; neem 4, waarna 0 overblijft. De ongebruikte posities voor 2 en 1 krijgen een 0.
In de volgorde van de plaatswaarden is het resultaat . Controleer dit door de gekozen plaatswaarden op te tellen: . Als je een ongebruikte kolom overslaat, verschuift elke volgende bit en verandert het getal.
De aftrekmethode werkt omdat elke binaire plaatswaarde maximaal één keer kan worden gebruikt. Nadat je de grootste passende macht hebt genomen, is de rest kleiner dan die macht. Ga in aflopende volgorde door alle plaatswaarden heen, ook de posities met een nul, totdat de positie voor de eenheden is gevuld. Zo komen de gekozen bits overeen met afzonderlijke machten in plaats van een lijst machten zonder posities.
Reken om door herhaald te delen
Een andere methode deelt herhaaldelijk door 2. Bewaar het quotiënt voor de volgende deling en noteer de rest:
| Getal | Quotiënt | Rest |
|---|---|---|
| 156 | 78 | 0 |
| 78 | 39 | 0 |
| 39 | 19 | 1 |
| 19 | 9 | 1 |
| 9 | 4 | 1 |
| 4 | 2 | 0 |
| 2 | 1 | 0 |
| 1 | 0 | 1 |
Lees de resten van onder naar boven. Dat geeft 10011100. De eerste rest hoort bij de positie voor de eenheden, dus als je naar beneden leest, draai je de volgorde van de plaatswaarden om. Hier zou dat 00111001 opleveren, oftewel 57.
Houd het grondtal zichtbaar
Het subscript in betekent grondtal 2, dus is de waarde twee. Dezelfde cijfers in betekenen tien. Binaire getallen lees je meestal cijfer voor cijfer: “één nul”. Het tellen gaat 0, 1, 10, 11, 100, 101, 110, 111, 1000; bij 2 gaat er een overdracht naar de volgende kolom. Een reeks van acht enen is . Als je een nul toevoegt, verschuift elke positie naar links en verdubbelt de waarde: 101 wordt 1010, waarbij vijf tien wordt.
Belangrijkste punten
- Tel de machten van twee op waarvan de bits 1 zijn.
- Voorloopnullen laten een waarde ongewijzigd; ontbrekende posities binnen het getal niet.
- Lees de resten van herhaald delen van de laatste naar de eerste.
- Een geheel getal is precies dan oneven als de minst significante bit 1 is.
- Een nul toevoegen verdubbelt een onbegrensd binair geheel getal.
1.3 Hexadecimale notatie als leesbare binaire notatie
Het hexadecimale talstelsel schrijft getallen met grondtal 16. De cijfers zijn 0–9 gevolgd door A, B, C, D, E en F, die 10 tot en met 15 betekenen. Eén hexadecimaal cijfer kan elke mogelijke groep van vier bits beschrijven, waardoor lange binaire patronen gemakkelijker te lezen zijn.
Koppel vier bits aan één cijfer
Omdat , komt elke hexadecimale positie overeen met precies vier binaire posities:
| Hexadecimaal | Binair | Hexadecimaal | Binair |
|---|---|---|---|
| 0 | 0000 | 8 | 1000 |
| 1 | 0001 | 9 | 1001 |
| 2 | 0010 | A | 1010 |
| 3 | 0011 | B | 1011 |
| 4 | 0100 | C | 1100 |
| 5 | 0101 | D | 1101 |
| 6 | 0110 | E | 1110 |
| 7 | 0111 | F | 1111 |
Om van binair naar hexadecimaal te gaan, groepeer je vanaf rechts. Het patroon 10011100 wordt 1001 1100, oftewel 0x9C. Vul een kortere laatste groep links aan met voorloopnullen: 101101 wordt 0010 1101, oftewel 0x2D. Als je vanaf links zou groeperen als 1011 01, zouden de cijfers op de verkeerde plaatsen komen.
Om terug te rekenen, schrijf je elk cijfer als vier bits. Zo wordt 0x3E8 gelijk aan 0011 1110 1000. Behoud alle vier bits binnen elke groep, ook als een groep met nullen begint. Alleen nullen helemaal links van het hele getal kun je weglaten zonder de waarde te veranderen.
Gebruik plaatswaarden met grondtal 16
Van rechts naar links zijn de hexadecimale plaatswaarden 1, 16, 256 en 4.096. Vermenigvuldig de waarde van elk cijfer met de bijbehorende plaatswaarde en tel de uitkomsten op. Voor 0x2F is de berekening . Voor 0x3E8:
Van decimaal naar hexadecimaal omrekenen werkt ook door herhaald te delen, nu door 16. Voor 1.000 is het eerste quotiënt 62 met rest 8. Als je 62 deelt, krijg je quotiënt 3 met rest 14, geschreven als E. Als je 3 deelt, krijg je quotiënt 0 met rest 3. Lees de resten van onder naar boven: 3, E, 8.
De groepering werkt door de plaatswaarde, niet alleen door een tabel met overeenkomsten. In een hexadecimaal getal van twee cijfers draagt de linkernibble zijn waarde maal 16 bij en de rechternibble zijn waarde maal 1. Binair vermenigvuldigt het vier plaatsen naar links verschuiven van een nibble de waarde ook met 16. Door die gemeenschappelijke factor kun je de twee groepen afzonderlijk lezen zonder eerst het hele getal naar decimaal om te rekenen.
Herken veelvoorkomende toepassingen
Eén byte is twee nibbles, dus precies twee hexadecimale cijfers, van 0x00 tot en met 0xFF. Een programma dat bytes weergeeft, kan een lang bestand hexadecimaal vier keer zo compact tonen als binair, terwijl de grenzen tussen de groepen zichtbaar blijven.
Webkleuren zoals #FF8000 gebruiken paren hexadecimale cijfers voor rood, groen en blauw. Ook geheugenadressen en Unicode-codepunten zoals U+00E9 gebruiken hexadecimale notatie. Een MAC-adres zoals 3C:22:FB:9A:01:7E schrijft zes bytes als twaalf hexadecimale cijfers, met scheidingstekens tussen de bytes.
Het voorvoegsel 0x, een subscript voor het grondtal zoals , of de # in een kleurcode geeft de notatie aan. De computer slaat dezelfde bits op, ongeacht de notatie die iemand gebruikt. Zo betekent 0x10 zestien. De waarde vijftien is het enkele cijfer F; als je “15” schrijft, gebruik je twee hexadecimale posities en betekent het eenentwintig.
Belangrijkste punten
- Hexadecimale notatie gebruikt 0–9 en A–F, waarbij A–F voor 10–15 staan.
- Groepeer binaire cijfers vanaf rechts in groepen van vier om naar hexadecimaal om te rekenen.
- Eén byte is precies twee hexadecimale cijfers.
- Hexadecimale plaatswaarden zijn machten van 16; een andere notatie verandert de opgeslagen bits niet.
2Sla gehele getallen op met een vaste bitbreedte
Een vast aantal bits kan slechts een vaste verzameling gehele getallen bevatten. De gekozen interpretatie bepaalt of al die patronen niet-negatieve waarden weergeven of dat sommige negatieve waarden weergeven. Je leest dezelfde byte op beide manieren, kiest bitbreedtes die bij een vereist bereik passen en volgt wat er aan de uiteinden gebeurt. Tweecomplement verklaart ook hoe negatieve waarden hun betekenis behouden als hun bitbreedte groter wordt.
2.1 Waarden zonder teken en overloop
Een geheel getal zonder teken geeft een niet-negatief geheel getal weer. Alle bits hebben gewone positieve binaire gewichten. De bitbreedte bepaalt hoeveel posities beschikbaar zijn, dus kan een byte geen negende bit krijgen alleen omdat een resultaat die nodig heeft.
Bepaal het bereik
Voor bits zijn er patronen. Als je bij nul begint, krijg je het bereik . De grootste waarde heeft op elke positie een 1:
| Bitbreedte | Bereik zonder teken |
|---|---|
| 8 bits | 0–255 |
| 16 bits | 0–65.535 |
| 32 bits | 0–4.294.967.295 |
Het aantal beschikbare waarden en de maximale waarde verschillen één. Met acht bits zijn 256 mogelijkheden beschikbaar, maar 256 zelf heeft negen posities nodig, 1 0000 0000.
Een opgeslagen waarde vult de bitbreedte met voorloopnullen. Zo is 45 in 16 bits gelijk aan 0000000000101101, oftewel 0x002D. Die nullen geven de bitbreedte aan zonder de waarde te veranderen. Een negatief getal heeft geen representatie zonder teken, welke bitbreedte je ook kiest.
Kies genoeg posities
Een leeftijdsbereik van 0 tot en met 150 past in 8 bits omdat 150 kleiner is dan 255. Een telling van 0 tot en met 100.000 bevat 100.001 mogelijke waarden. Zestien bits bieden maar 65.536 patronen. Zeventien bieden er 131.072, dus is 17 de minimale wiskundige bitbreedte. Een programma dat de gangbare breedtes 8, 16, 32 en 64 gebruikt, zou 32 bits kiezen.
Dezelfde redenering geldt voor elke begrensde teller: controleer de grootste waarde die de teller daadwerkelijk moet bevatten, met inbegrip van beide grenzen. Een bereik van 0 tot en met 256 heeft 257 patronen nodig en past daarom niet in één byte.
Een nuttige grenscontrole vergelijkt opeenvolgende bitbreedtes. Het maximum zonder teken voor 8 bits is 255 en voor 9 bits is het 511. Een bit toevoegen verdubbelt het aantal patronen; het maximum wordt twee keer het oude maximum plus één. Dit onderscheid is van belang als een vereiste precies op een macht van twee uitkomt: die grenswaarde heeft een nieuwe positie nodig, ook al heeft de vorige bitbreedte zoveel patronen.
Volg een resultaat buiten het bereik
Overloop betekent dat een resultaat niet in de gekozen representatie past. Als een berekening met 8 bits alleen de laagste acht bits bewaart, levert 255 plus 1 de uitkomst 1 0000 0000 op en wordt 00000000 opgeslagen: nul. De extra positie wordt weggegooid.
Voor 200 plus 100 is het wiskundige resultaat 300. Bij deze bitbreedte wordt de rest na een volledige cyclus van 256 patronen bewaard: . De opgeslagen byte is 00101100. Dit gedrag heet cyclische overloop (wraparound). Het verandert niets aan het rekenkundige feit dat 200 plus 100 gelijk is aan 300; het beschrijft wat de beperkte opslag bewaart.
Het gedrag bij overloop hangt af van het systeem. Sommige bewerkingen lopen cyclisch over, sommige melden een fout en sommige getaltypen worden groter. Bij een berekening over cyclische overloop moet dat gedrag vaststaan voordat je hoge bits weggooit.
Herken vaste bitbreedtes in gegevens
Een IPv4-adres heeft 32 bits, wat ongeveer 4,3 miljard mogelijke patronen geeft. Die eindige adresruimte droeg bij aan de behoefte aan een groter adresseringssysteem. Een gewoon RGB-kleurkanaal heeft 8 bits, wat de intensiteitsschaal van 0–255 verklaart. Het maximum volgt in beide gevallen uit de bitbreedte; een langere decimale schrijfwijze voegt geen opslagcapaciteit toe.
Belangrijkste punten
- Een geheel getal zonder teken van n bits loopt van 0 tot en met 2ⁿ − 1.
- Tel beide grenswaarden mee wanneer je een bitbreedte kiest.
- Voorloopnullen vullen een bitbreedte zonder een waarde zonder teken te veranderen.
- Overloop betekent dat een resultaat buiten het weergeefbare bereik valt.
- Als een systeem alleen de laagste n bits bewaart, lopen waarden zonder teken cyclisch over in cycli van 2ⁿ.
2.2 Negatieve gehele getallen in tweecomplement
Een negatief geheel getal heeft een representatieregel nodig, niet alleen een minteken naast een byte. Tweecomplement geeft de hoogste bit een negatief gewicht. De overige posities behouden hun positieve gewicht, zodat elk patroon één waarde met teken heeft en nul één patroon heeft.
Vergelijk twee interpretaties met teken
Een eenvoudiger schema, de teken-grootterepresentatie, gebruikt de hoogste bit alleen voor het teken en de overige bits voor de grootte. In 8 bits is +5 gelijk aan 00000101 en −5 aan 10000101. Het schema heeft twee nullen, 00000000 en 10000000, en voor optellen met verschillende tekens zijn extra regels nodig.
In tweecomplement met 8 bits zijn de gewichten −128, 64, 32, 16, 8, 4, 2 en 1. Dus betekent 11010011 dat . Als je de andere zeven bits als een grootte van 83 leest, krijg je −83, wat bij een andere representatie hoort.
| Bitbreedte | Bereik van tweecomplement |
|---|---|
| 8 bits | −128–127 |
| 16 bits | −32.768–32.767 |
| 32 bits | −2.147.483.648–2.147.483.647 |
In het algemeen is het bereik . Nul en positieve waarden zien eruit als gewone binaire getallen met een 0 vooraan. Alleen enen geven −1 weer.
Schrijf een negatieve waarde
Om het teken van een weergeefbare waarde om te keren, keer je elke bit om en tel je er 1 bij op, waarbij je de bitbreedte vast houdt. Om −45 in 8 bits te coderen:
- Schrijf +45 als 00101101.
- Keer alle acht bits om: 11010010.
- Tel 1 op: 11010011, oftewel 0xD3.
Als je na het omkeren stopt, krijg je −46. Als je het hele proces op 11010011 toepast, krijg je weer 00101101 en daarmee +45.
Een andere manier codeert als de waarde zonder teken . Hier is , waarvan de binaire vorm 11010011 is. De byte betekent dus 211 zonder teken of −45 met teken. De bits zijn niet veranderd; het type wel.
Voor omkeren gevolgd door optellen is ook een rekenkundige verklaring. Bij een positieve waarde x van n bits verandert omkeren die in de waarde zonder teken . Als je daar één bij optelt, krijg je , waarvan de interpretatie met teken −x is. Dit verbindt de bitmethode met de aftrekmethode en verklaart waarom het weglaten van de laatste 1 de verkeerde negatieve waarde geeft.
Behoud een waarde met teken in meer bits
Bij tekenuitbreiding kopieer je de hoogste bit naar de nieuwe posities links. −3 in vier bits is 1101; in 8 bits is dat 11111101. Het negatieve gewicht van de hoogste bit en de toegevoegde positieve gewichten zijn samen nog steeds −3. Als je met nullen zou aanvullen, kreeg je 00001101, oftewel +13. Positieve waarden worden met nullen uitgebreid: 0011 wordt 00000011.
Herken de grenswaarden
Tweecomplement ondersteunt gewone binaire optelling voor resultaten die passen. In 4 bits geeft 0101 plus 1101, oftewel 5 plus −3, de uitkomst 1 0010. Als je de laagste vier bits bewaart, krijg je 0010, oftewel 2. Zo kan dezelfde basishardware voor optellen waarden met en zonder teken verwerken.
Een resultaat buiten het bereik is anders: 127 plus 1 in 8 bits laat 10000000 over, wat als −128 wordt gelezen. Ook heeft −128 geen positieve tegenhanger in 8 bits. Als je 10000000 omkeert en er 1 bij optelt, krijg je 10000000 terug omdat +128 buiten het bereik ligt. Maak de representatie breder voordat je die positieve waarde vormt.
Belangrijkste punten
- De hoogste bit heeft gewicht −2ⁿ⁻¹ in tweecomplement met n bits.
- Tweecomplement heeft één nul en één negatieve waarde meer dan er positieve waarden zijn.
- Keer het teken om door elke bit om te keren en 1 op te tellen binnen de vaste bitbreedte.
- Tekenuitbreiding kopieert de hoogste bit naar toegevoegde posities.
- De meest negatieve waarde heeft geen positieve tegenhanger met dezelfde bitbreedte.
- Hetzelfde patroon kan met en zonder teken een andere betekenis hebben.
3Sla breuken en drijvendekommawaarden op
De posities voor gehele getallen lopen rechts van de binaire komma door als helften, kwarten en kleinere breuken. Sommige decimale breuken eindigen binair, terwijl andere een eindeloos patroon vereisen. Vastekommarepresentatie reserveert een vast aantal posities voor de breuk; drijvendekommarepresentatie slaat naast een mantisse ook een schaal op. Door deze formaten te lezen begrijp je zowel hun grote bereik als hun afrondingsfouten, waaronder het bekende resultaat van 0,1 en 0,2 optellen.
3.1 Binaire breuken en vastekommarepresentatie
De eerste positie na de binaire komma is een half. Elke volgende positie is de helft van de vorige: een kwart, een achtste, een zestiende, enzovoort. Een 1 telt die breuk mee; een 0 laat die weg. De posities voor gehele getallen links behouden hun gebruikelijke machten van twee.
Lees en maak een binaire breuk
Voor is het gehele deel 4 plus 1. Het breukdeel is een half plus een achtste, wat geeft.
Om een decimale breuk om te rekenen, vermenigvuldig je die herhaaldelijk met 2. Het gehele deel van elk resultaat is het volgende binaire cijfer; bewaar alleen het breukdeel voor de volgende vermenigvuldiging. Voor 0,375:
- , dus is de eerste bit 0.
- , dus is de volgende bit 1; bewaar 0,5.
- , dus is de volgende bit 1 en stopt het proces.
Het resultaat is . De waarde is een kwart plus een achtste, oftewel 0,375. Deze bits lees je in de gevonden volgorde, anders dan de resten bij het delen van gehele getallen.
Bepaal of de ontwikkeling eindigt
Vereenvoudig de breuk volledig. Die heeft precies dan een eindige binaire ontwikkeling als de noemer een macht van 2 is. Waarden zoals 0,5, 0,25, 0,75 en 0,375 voldoen daaraan. Zo is 0,375 gelijk aan 3/8 en is acht een macht van twee.
Decimaal 0,1 is 1/10. De noemer bevat een factor 5, dus herhaalt de binaire ontwikkeling zich: . Net zoals een derde niet kan eindigen in decimale notatie, kan een tiende niet eindigen in binaire notatie. De korte schrijfwijze “0,1” heeft daarom een benadering nodig als er slechts een beperkt aantal binaire posities beschikbaar is. Hetzelfde probleem geldt voor 0,2 en 0,3.
De noemerregel volgt uit de posities zelf. Een eindige reeks die bij de f-de positie van het breukdeel eindigt, kun je schrijven als een geheel getal gedeeld door . Vereenvoudiging van die breuk kan factoren twee wegnemen, maar kan geen andere priemfactor in de noemer introduceren. Een vereenvoudigde noemer die vijf bevat, kan daarom niet gelijk zijn aan zo’n eindige binaire som.
Reserveer een vaste schaal
Een vastekommarepresentatie geeft een vast aantal bits aan het breukdeel. Met vier bits voor het gehele deel en vier voor het breukdeel betekent 0110,1000 de waarde 6,5. De kleinste stap is en de grootste waarde zonder teken is 1111,1111, oftewel 15,9375.
Anders gezegd: het opgeslagen gehele getal van acht bits wordt geschaald met 1/16. Het patroon 01101000 heeft de waarde zonder teken 104; gedeeld door 16 geeft dat 6,5. De komma maakt deel uit van de interpretatie en hoeft dus niet als extra symbool te worden opgeslagen.
Als je in totaal acht bits houdt maar vijf bits voor het gehele deel en drie voor het breukdeel gebruikt, wordt de stap 0,125 en het maximum 31,875. Je wint bereik maar verliest fijne tussenstappen. Vastekommarepresentatie geeft veelvouden van de stap binnen het bereik exact weer.
Een exact aantal centen gebruikt een verwant schaalidee: 19,99 geldeenheden wordt het gehele getal 1999 cent. Voor metingen van zeer verschillende groottes slaat drijvendekommarepresentatie een verschuifbare schaal op, zodat dezelfde bitbreedte een veel groter bereik beslaat dan bij vastekommarepresentatie.
Belangrijkste punten
- Binaire breukposities zijn 1/2, 1/4, 1/8, enzovoort.
- Vermenigvuldig een breukdeel met 2 en lees de gehele delen op volgorde.
- Een vereenvoudigde breuk eindigt precies dan binair als de noemer een macht van 2 is.
- Bij een vaste totale bitbreedte weeg je in vastekommarepresentatie bereik af tegen de resolutie van het breukdeel.
3.2 Lees en schrijf IEEE 754-velden
Drijvendekommarepresentatie schrijft een waarde in binaire wetenschappelijke notatie. Zo is 6,25 gelijk aan . Het voorste deel is de mantisse en de exponent bepaalt de schaal. IEEE 754 definieert veelgebruikte formaten om deze delen op te slaan.
Ken de velden
| Formaat | Totaal | Teken | Exponent | Fractie | Verschuiving |
|---|---|---|---|---|---|
| Enkel, binary32 | 32 bits | 1 | 8 | 23 | 127 |
| Dubbel, binary64 | 64 bits | 1 | 11 | 52 | 1023 |
Voor een normale waarde is de interpretatie . Hier is de tekenbit, de opgeslagen exponent zonder teken en het fractieveld. Een tekenbit van 0 betekent positief; 1 betekent negatief. Als je alleen de tekenbit verandert, keer je het teken van een drijvendekommawaarde om.
De opgeslagen exponent is gelijk aan de werkelijke exponent plus de exponentverschuiving. Bij enkele precisie wordt exponent 2 gelijk aan 129, oftewel 10000001; exponent −3 wordt 124, oftewel 01111100. Normale opgeslagen exponenten lopen van 1 tot en met 254 en geven −126 tot en met 127 weer.
Een normale binaire mantisse begint altijd met 1, dus laat het formaat die impliciete bit weg. Alleen de bits na de komma komen in het fractieveld. Dit geeft 24 significante binaire cijfers bij enkele precisie en 53 bij dubbele precisie.
Codeer −6,25 stap voor stap
Normaliseer eerst de grootte: . Vul daarna de velden:
- Negatieve waarde: teken 1.
- Exponent 2: tel 127 op voor 129, geschreven als 10000001.
- Fractie ,1001: sla 1001 op gevolgd door 19 nullen.
Het resultaat is 1 10000001 10010000000000000000000, oftewel 0xC0C80000. De fractie wordt rechts aangevuld omdat deze posities na de komma doorlopen. Als je de voorste 1 zou opslaan, zou de betekenis van de fractie verschuiven.
Een negatieve werkelijke exponent brengt de schaal onder één. Voor 0,15625 is de binaire vorm . De tekenbit in binary32 is 0 en de opgeslagen exponent is 124, oftewel 01111100. De fractie begint met 01 en wordt rechts aangevuld. De impliciete 1 hoort nog steeds bij de genormaliseerde mantisse, ook al is het volledige getal kleiner dan één.
Decodeer een patroon
Het patroon 0x41200000 met enkele precisie valt uiteen in 0 10000010 01000000000000000000000. Het teken is positief. Het exponentveld is 130, dus trek je 127 af om 3 te krijgen. Herstel de impliciete 1 om te krijgen. Tot slot is .
Controleer eerst gereserveerde exponenten
De formule voor normale waarden beschrijft niet elk patroon:
| Exponentveld | Fractieveld | Betekenis |
|---|---|---|
| Allemaal nullen | Nul | +0 of −0, gekozen door het teken |
| Allemaal nullen | Ongelijk aan nul | Een subnormale waarde, met 0 vooraan |
| Allemaal enen | Nul | Positieve of negatieve oneindigheid |
| Allemaal enen | Ongelijk aan nul | NaN, “geen getal” |
Subnormale waarden geven zeer kleine waarden weer zonder de impliciete 1. NaN kan het resultaat zijn van een ongeldige numerieke bewerking zoals 0 gedeeld door 0. IEEE 754-2019 definieert deze formaten.
Belangrijkste punten
- Enkele precisie heeft velden van 1, 8 en 23 bits; dubbele precisie heeft 1, 11 en 52 bits.
- Trek de exponentverschuiving af bij het decoderen; tel die op bij het coderen.
- Normale waarden hebben een voorste 1 die niet wordt opgeslagen.
- Vul het fractieveld rechts aan met nullen.
- Exponentvelden met alleen nullen of alleen enen hebben een speciale betekenis.
- De teken- en exponentvelden van een drijvendekommagetal vormen geen geheel getal in tweecomplement.
3.3 Bereik, precisie en afrondingsfout
Een formaat voor drijvendekommagetallen kan een enorm bereik bestrijken zonder elke waarde in dat bereik weer te geven. De exponent bepaalt de schaal; het fractieveld bepaalt hoeveel significante bits nabijgelegen waarden onderscheiden. Bereik en precisie beantwoorden verschillende vragen.
Vergelijk enkele en dubbele precisie
Enkele precisie reikt tot ongeveer en heeft ongeveer zeven significante decimale cijfers. De kleinste positieve normale waarde is ongeveer . Dubbele precisie reikt tot ongeveer , heeft ongeveer 15–16 significante decimale cijfers en een kleinste positieve normale waarde van ongeveer . Subnormale waarden komen bij elk formaat onder het normale minimum.
Significante cijfers tel je vanaf het eerste betekenisvolle cijfer, niet vanaf de decimale komma. Een grote exponent levert niet meer fractiebits op. Bij enkele precisie is de afstand boven 1 gelijk aan . Tussen en is de afstand 2, dus is het gehele getal 16.777.217 niet beschikbaar, hoewel het ver onder de maximale eindige waarde ligt.
Rond af op een waarde die past
De standaardregel van IEEE 754 is afronden naar de dichtstbijzijnde waarde, naar even bij gelijke afstand. Kies de dichtstbijzijnde weergeefbare waarde; kies bij een waarde precies halverwege de waarde waarvan de laatst behouden mantissebit even is. Zo wordt 16.777.217 bij enkele precisie afgerond op 16.777.216.
Het verschil tussen de bedoelde waarde en de opgeslagen waarde is de afrondingsfout. Bij enkele precisie wordt 0,1 opgeslagen als 0,100000001490116119384765625. Bij dubbele precisie is dat ongeveer 0,10000000000000000555. Meer precisie verkleint deze fout, maar kan een repeterende ontwikkeling niet laten eindigen.
Begrijp een bekend resultaat
Bij gewone berekeningen met dubbele precisie volgens IEEE 754 levert het optellen van 0,1 en 0,2 een opgeslagen resultaat op dat vaak wordt weergegeven als 0.30000000000000004. Het verschilt van de opgeslagen benadering van 0,3, dus is 0.1 + 0.2 == 0.3 onwaar in talen zoals Python en JavaScript. Vergelijk bij meetresultaten het verschil met een tolerantie die je kiest voor de schaal en het doel van de taak.
Veel waarden zijn exact. Dubbele precisie bevat elk geheel getal van tot en met exact. Waarden zoals 0,5 en 0,375 hebben ook korte binaire vormen die zowel in de mantisse als binnen het exponentbereik passen.
Kies een geschikt getaltype
Voor tellingen en identificatiecodes zijn gehele getallen geschikt. Voor exacte geldbedragen zijn gehele aantallen kleinere geldeenheden, zoals centen, of een decimaal getaltype geschikt. Voor metingen en wetenschappelijke berekeningen is drijvendekommarepresentatie vaak geschikt. Een waarde die qua grootte buiten het formaat valt, kan door overloop oneindig worden; volgens de standaardafrondingsregel wordt bij enkele precisie positief oneindig. Zeer kleine resultaten kunnen subnormaal worden of op nul worden afgerond.
Weergaveconventies staan los van opslag. De schrijfwijzen “3.14” en “3,14” kunnen in verschillende landen hetzelfde getal aanduiden. Een programma dat tekst leest, moet die conventie kennen; anders kan het de komma afwijzen of de waarde als 314 lezen. Een ander afgedrukt scheidingsteken verbetert de binaire precisie niet.
Belangrijkste punten
- Het bereik bepaalt de grootteorde; de precisie bepaalt de afstand tussen nabijgelegen waarden.
- Afstanden tussen drijvendekommagetallen groeien naarmate de grootte toeneemt.
- De standaardregel rondt af naar de dichtstbijzijnde waarde en bij precies gelijke afstand naar een even laatste bit.
- Een korte decimale breuk kan binair toch afronding nodig hebben.
- Kies opslag als geheel getal, decimaal getal of drijvendekommagetal die bij de taak past.
4Zet tekens om in codes en bytes
Voor tekst is een afspraak nodig tussen de software die de tekst schrijft en de software die deze leest. ASCII geeft een kleine verzameling tekens numerieke codes. Unicode biedt een gedeelde coderuimte voor veel schriftsystemen, terwijl coderingen zoals UTF-8 de daadwerkelijke bytes bepalen. Door onderscheid te maken tussen een weergegeven teken, een codepunt en een byte kun je tekstgroottes berekenen en uitleggen waarom een correct opgeslagen bestand verminkt kan verschijnen.
4.1 ASCII-codes en hun beperkingen
Om tekst op te slaan, kent een systeem numerieke codes toe aan tekens en schrijft het die getallen als bits. Een tekencode werkt alleen als de lezer dezelfde afspraak gebruikt als de schrijver. De byte voor een letter is een gecodeerd label; het is geen piepklein plaatje van die letter.
Lees de ASCII-tabel
ASCII, de American Standard Code for Information Interchange, werd voor het eerst gepubliceerd in 1963. ASCII gebruikt 7 bits voor 128 codes, genummerd van 0–127. Bij opslag in bytes vult een ASCII-code meestal één byte met een 0 vooraan.
| Codes | Betekenis |
|---|---|
| 0–31 en 127 | Besturingstekens |
| 32 | Spatie |
| 48–57 | Cijfers “0”–“9” |
| 65–90 | Hoofdletters “A”–“Z” |
| 97–122 | Kleine letters “a”–“z” |
Leestekens vullen de tussenruimtes. Codes 32–126 vormen 95 afdrukbare tekens, inclusief de spatie. Besturingstekens beïnvloeden de tekstverwerking zonder een zichtbaar symbool af te drukken: tab is 9, regeldoorvoer is 10 en wagenretour is 13.
Codeer een korte tekenreeks
De tekst “Hi!” heeft drie tekens. Hun decimale codes zijn 72, 105 en 33; hexadecimaal zijn dat 0x48, 0x69 en 0x21. Als volledige bytes wordt de tekst 01001000 01101001 00100001. Het uitroepteken heeft net als de letters een code nodig.
De code van een kleine ASCII-letter ligt 32 hoger dan die van de bijbehorende hoofdletter. “A” is 65, oftewel 01000001, terwijl “a” 97 is, oftewel 01100001. Die ene veranderde bit verklaart het verschil. Door de volgorde komen ook alle hoofdletters vóór alle kleine letters. Een eenvoudige sortering op code zet “Zebra” daarom vóór “appel”; die volgt niet de gewone woordenboekvolgorde.
Maak onderscheid tussen een cijfer en een getal
Het teken “7” heeft decimale code 55 en byte 00110111. Het gehele getal 7 heeft byte 00000111. Om de numerieke waarde van een cijfer uit de ASCII-code terug te krijgen, trek je 48 af, de code voor “0”: . Dit werkt omdat de tien cijfercodes opeenvolgend zijn.
De opslag hangt af van de gekozen representatie. De tekst “2026” heeft vier ASCII-bytes nodig, één per cijfer. Het gehele getal 2026 past in twee bytes als waarde zonder teken van 16 bits. Tekst bewaart de volgorde van de tekens; een geheel getal geeft de numerieke waarde weer. Zo kan een identificatiecode als tekst voorloopnullen bewaren die een geheel getal niet onderscheidt.
Om een langere tekenreeks te coderen, verwerk je elk teken op volgorde, inclusief spaties, leestekens en besturingstekens. Bij het decoderen zoek je met dezelfde tabel elke code één voor één in omgekeerde richting op. De volgorde is belangrijk: als je twee geldige codes verwisselt, kun je nog steeds geldige ASCII krijgen, maar wel andere tekst. Als codes worden herkend, bewijst dat niet dat ze de bedoelde volgorde of betekenis hebben.
Begrijp waarom codepagina’s problemen veroorzaakten
ASCII heeft geen letters met accenten zoals “é”, “ñ” of “ü”, en geen Griekse, Cyrillische, Arabische of Chinese tekens. Latere 8-bitscodepagina’s gebruikten waarden 128–255 voor extra symbolen, maar waren het niet eens over die toevoegingen.
Zo betekent byte 0xE9 “é” in Latin-1 maar “й” in Windows-1251. Windows-1252 is een andere veelgebruikte codepagina. Een bytewaarde kan een teken buiten ASCII daarom niet identificeren zonder dat de codering bekend is. De verkeerde tabel kan symbolen opleveren die leesbaar lijken, maar toch de verkeerde tekst vormen.
Belangrijkste punten
- ASCII definieert 128 codes met 7 bits, meestal opgeslagen als één code per byte.
- Afdrukbare tekens omvatten spaties en leestekens; besturingstekens hebben andere functies.
- Cijfertekens hebben andere codes dan de gehele getallen die ze aanduiden.
- Verschillende oudere codepagina’s kunnen verschillende tekens aan dezelfde byte toekennen.
4.2 Unicode-codepunten en UTF-coderingen
Unicode kent tekens uit schriftsystemen over de hele wereld getallen toe uit een gedeelde verzameling. Die getallen heten codepunten. “A” is U+0041, “é” is U+00E9, “Ж” is U+0416, “中” is U+4E2D en “😀” is U+1F600. De U+-notatie gebruikt hexadecimale cijfers met minstens vier posities.
Maak onderscheid tussen een codepunt en de bytes
De coderuimte loopt van U+0000 tot en met U+10FFFF, oftewel 1.114.112 posities, met meer dan 150.000 toegewezen tekens. Een codepunt duidt een teken of een gereserveerde positie aan; een tekencodering bepaalt de weergave in bytes.
| Codering | Opslag voor een geldig codepunt van een teken |
|---|---|
| UTF-8 | 1–4 bytes |
| UTF-16 | 2 bytes tot en met U+FFFF; 4 bytes daarboven |
| UTF-32 | 4 bytes |
Het surrogaatbereik U+D800–U+DFFF is gereserveerd voor het paarmechanisme van UTF-16; afzonderlijke surrogaten zijn geen geldige tekens om in deze vormen te coderen. Een paar UTF-16-code-eenheden geeft één aanvullend codepunt weer. Zo is “😀” in UTF-16 gelijk aan D83D DE00.
Lees de bytebereiken van UTF-8
UTF-8 behoudt ASCII: U+0000–U+007F gebruiken één byte. U+0080–U+07FF gebruiken er twee; geldige codepunten van tekens in U+0800–U+FFFF gebruiken er drie; U+10000–U+10FFFF gebruiken er vier. Daardoor is Engelse ASCII-tekst byte voor byte compatibel met UTF-8.
Een teken van één byte begint met 0. Langere tekens beginnen met 110, 1110 of 11110 voor respectievelijk twee, drie of vier bytes. Elke vervolgbyte begint met 10. De overige bits bevatten het codepunt.
Voor “é”, U+00E9, is de waarde in 11 bits 00011101001. Splits die in vijf bits en zes bits: 00011 en 101001. Vul die in op de plaatsen van 110xxxxx 10xxxxxx en je krijgt 11000011 10101001, oftewel C3 A9. Het codepunt 00E9 is niet zelf de UTF-8-bytereeks.
Bij coderen en decoderen moet je ook rekening houden met de voorvoegsels van de bytes. Een UTF-8-vervolgbyte is geen zelfstandige ASCII-byte: de eerste twee bits zijn 10, dus hoort die binnen een langere tekenreeks. Als je bij een bytelimiet een deel van een teken met meerdere bytes verwijdert, kan een onvolledige reeks overblijven. De opslaglengte en de grenzen waarop je tekst kunt splitsen, hangen dus samen.
Tel de juiste eenheden
“café” heeft vier weergegeven tekens maar vijf UTF-8-bytes: 63 61 66 C3 A9. “€” gebruikt E2 82 AC, drie bytes; “中” gebruikt E4 B8 AD, ook drie; “😀” gebruikt F0 9F 98 80, vier. Een bytelimiet kan dus minder tekens toelaten dan de numerieke grootte doet vermoeden.
Eén weergegeven teken kan ook meerdere codepunten bevatten. “é” kan U+00E9 zijn of “e” gevolgd door U+0301, een combinerend accent aigu. De tweede vorm gebruikt drie UTF-8-bytes, 65 CC 81. Normalisatie zet equivalente reeksen om naar een gemeenschappelijke vorm om ze te vergelijken. De weergegeven emoji “👍🏽” bevat twee codepunten, U+1F44D en U+1F3FD, samen acht UTF-8-bytes.
Onderzoek verminkte tekst
Als je “café” in UTF-8 als Windows-1252 leest, wordt het “café”: C3 en A9 worden als afzonderlijke tekens behandeld. Dit is verminkte tekst door verkeerde tekencodering, veroorzaakt door decoderen met de verkeerde codering. Met de juiste decodering kun je de tekst herstellen zolang de oorspronkelijke bytes intact blijven. Een webpagina kan de codering opgeven met <meta charset="utf-8">.
Belangrijkste punten
- Een codepunt duidt een teken aan; een tekencodering bepaalt de bytes ervan.
- UTF-8 gebruikt één tot vier bytes en behoudt ASCII ongewijzigd.
- Vervolgbytes in UTF-8 beginnen met 10.
- Een weergegeven teken, een codepunt en een byte zijn verschillende teleenheden.
- Normalisatie kan equivalente tekenreeksen op dezelfde vorm brengen.
- Decoderen met de verkeerde codering kan verminkte tekst opleveren.
5Meet beeld en geluid in bits
Afbeeldingen en opnamen zetten visuele en geluidsdetails om in getallen. Een rasterafbeelding slaat een raster met pixelwaarden op; bemonsterde audio slaat metingen op die op regelmatige tijdstippen zijn gedaan. De benodigde opslag hangt af van het aantal bewaarde waarden en het aantal bits dat elke waarde nodig heeft. Deze keuzes beïnvloeden ook welke details behouden blijven. Vectortekeningen en MIDI volgen een andere aanpak: ze beschrijven vormen of noten als instructies die een apparaat later omzet in beeld of geluid.
5.1 Pixels, RGB, kleurenpaletten en transparantie
Een rasterafbeelding is een raster van pixels. Elke pixel bevat een kleurwaarde. De breedte en hoogte geven de resolutie van de afbeelding aan: 1920 bij 1080 betekent pixels. Een pixelaantal beschrijft het raster, niet de afgedrukte grootte in meters.
Ken genoeg bits toe aan elke pixel
De kleurdiepte is het aantal bits dat voor de kleur van een pixel wordt gebruikt. Een diepte van bits maakt mogelijke codes mogelijk. Eén bit kan twee kleuren onderscheiden. Grijstinten met acht bits kunnen 256 intensiteiten onderscheiden, meestal van 0 voor zwart tot en met 255 voor wit.
Een eenvoudige afbeelding van 3 bij 3 kan 1 voor zwart en 0 voor wit gebruiken. Een zwart plusteken wordt weergegeven door de rijen 010, 111 en 010. Negen pixels van elk één bit hebben negen bits aan pixelinformatie nodig. De werkelijke opslag in een bestand kan naast die bits opvulling en andere informatie bevatten.
Meng licht met RGB
RGB slaat intensiteiten van rood, groen en blauw licht op. Met 8 bits per kanaal loopt elke intensiteit van 0 tot en met 255 en gebruikt een pixel 24 bits. Het aantal mogelijke kleuren is .
| RGB-waarden | Kleur |
|---|---|
| (0, 0, 0) | Zwart |
| (255, 255, 255) | Wit |
| (255, 0, 0) | Rood |
| (0, 0, 255) | Blauw |
| (255, 255, 0) | Geel |
RGB is additieve menging van licht. Rood en groen licht samen geven geel. Een voorspelling op basis van het mengen van verf gebruikt een ander proces en levert het verkeerde model voor een scherm op.
Lees hexadecimale kleurcodes
Een webkleur gebruikt #RRGGBB: twee hexadecimale cijfers voor rood, dan groen en dan blauw. #FF8000 betekent (255, 128, 0), een oranje tint. #808080 betekent (128, 128, 128), een middengrijze tint; gelijke kanaalwaarden leveren grijs op. #0000FF geeft de grootste blauwe waarde met rood en groen op nul.
Elk paar is één byte. FF is dus 255, niet een paar afzonderlijke kleurintensiteiten. De # markeert de hele RGB-code en neemt geen kanaal in.
Het RGB-model en het paletmodel zoeken een pixelwaarde op verschillende manieren op. Bij directe RGB geeft het lezen van de pixel onmiddellijk de drie kanaalintensiteiten. Bij geïndexeerde kleur geeft het lezen van de pixel een nummer van een tabelvermelding en levert een tweede opzoeking de intensiteiten. Als je een paletvermelding verandert, kunnen daardoor veel weergegeven pixels met dezelfde index veranderen, terwijl hun opgeslagen pixelindices ongewijzigd blijven.
Sla een paletindex op
Als een afbeelding weinig kleuren gebruikt, kan die een kleurenpalet bewaren, een tabel met de geselecteerde kleuren. Een pixel slaat dan een index naar die tabel op. Een palet van 16 kleuren heeft vier bits per pixel nodig omdat vier bits 16 vermeldingen onderscheiden. Het palet zelf neemt ook opslagruimte in. GIF gebruikt maximaal 256 paletkleuren, zodat een index van 8 bits per pixel mogelijk is.
Voeg transparantie toe
Een alfakanaal beschrijft de ondoorzichtigheid. Een veelgebruikte schaal van 8 bits gebruikt 0 voor volledig transparant en 255 voor volledig ondoorzichtig, met tussenliggende waarden voor gedeeltelijke transparantie. Als je dat kanaal toevoegt aan RGB van 24 bits, krijg je RGBA van 32 bits. Alfa staat los van rood, groen en blauw: een volledig transparante pixel kan nog steeds opgeslagen kleurwaarden hebben die in de uiteindelijke afbeelding niet zichtbaar zijn.
Belangrijkste punten
- Een rasterafbeelding slaat een raster met pixelwaarden op.
- De kleurdiepte bepaalt het aantal beschikbare kleurcodes per pixel.
- Gewone RGB gebruikt drie kanalen van 8 bits, samen 24 bits.
- Een paletindex selecteert een kleur uit een tabel.
- Een alfakanaal voegt informatie over ondoorzichtigheid toe; alfa van 8 bits maakt van RGB een RGBA van 32 bits.
5.2 Bereken de opslagruimte voor afbeeldingen en video
De pixelgegevens van een ongecomprimeerde rasterafbeelding groeien met het aantal pixels en het aantal bits per pixel. Als je de eenheden bij elke stap vermeldt, kun je de hoeveelheid informatie onderscheiden van de bestandsgrootte in bytes die een programma voor bestandsweergave toont.
Bereken de pixelgegevens
Gebruik . Deel door 8 voor het aantal bytes. Je moet breedte en hoogte vermenigvuldigen omdat elke rij de volledige breedte aan pixels bevat.
Bepaal voor 1920 bij 1080 met 24 bits per pixel eerst het aantal van 2.073.600 pixels. Vermenigvuldig met 24 voor 49.766.400 bits en deel dan door 8 voor 6.220.800 bytes. Dat is ongeveer 6,2 MB, oftewel 5,93 MiB. Een andere eenheid verandert de onderliggende pixelgegevens niet.
Voor 640 bij 480 met 8-bitsgrijstinten zijn er 307.200 pixels. Acht bits per pixel geven 2.457.600 bits; gedeeld door 8 is dat 307.200 bytes, ongeveer 307 kB. Hier is door die ene byte per pixel het uiteindelijke aantal bytes gelijk aan het aantal pixels.
Voorspel veranderingen voordat je rekent
Als je de breedte verdubbelt, verdubbelt het aantal pixels in elke rij. Als je de hoogte verdubbelt, verdubbelt het aantal rijen. Als je beide verdubbelt, worden het aantal pixels en de benodigde opslag dus vier keer zo groot. Als je de diepte van 8 naar 24 bits per pixel verhoogt, verdrievoudigt de opslag bij dezelfde resolutie. Deze factoren vermenigvuldigen als beide veranderen.
De ruwe berekening geeft de pixelgegevens, niet noodzakelijk een volledig afbeeldingsbestand. Een bestand slaat ook metadata op, zoals breedte, hoogte, kleurdiepte en formaat. Een foto kan camera-instellingen, datum en locatie vastleggen. Palettabellen, headers, opvulling en compressie kunnen de uiteindelijke grootte in bytes ook veranderen.
Bereken bij een diepte onder acht bits eerst de volledige hoeveelheid pixelgegevens in bits voordat je omrekent. Een afbeelding van 100 bij 60 met één bit per pixel bevat 6.000 pixelbits, oftewel 750 verpakte bytes. Als je elke pixel als een byte zou behandelen, zou je die hoeveelheid acht keer te groot inschatten. Als een formaat elke rij tot een bepaalde grens aanvult, moet je die opvulling afzonderlijk toevoegen; de kleurdiepte verandert daardoor niet.
Breid de berekening uit naar video
Een video toont een reeks afbeeldingen die videobeelden heten. Bij 30 beelden per seconde heeft RGB-video van 1920 bij 1080 elke seconde bytes aan ongecomprimeerde beeldgegevens nodig, ongeveer 187 MB/s. Vermenigvuldig met de duur voor de totale hoeveelheid beeldgegevens. Geluid vraagt extra opslagruimte.
Deze hoge snelheid verklaart waarom gewone videobestanden worden gecomprimeerd. De snelheid van een gecomprimeerde video is een afzonderlijke grootheid; die kun je niet alleen uit de resolutie afleiden.
Vergelijk raster- en vectorafbeeldingen
| Rasterafbeelding | Vectorafbeelding |
|---|---|
| Slaat een raster met kleurwaarden op | Slaat vormen en tekeninstructies op |
| Geschikt voor foto’s en textuur | Geschikt voor logo’s, diagrammen en lettercontouren |
| Bij vergroten van het raster worden pixels zichtbaar | Vormen kunnen op grotere schaal opnieuw worden getekend |
Een vectorbestand kan een lijn van (0, 0) naar (100, 50) beschrijven, of een cirkel met een middelpunt, straal en vulkleur. Het hoeft geen afzonderlijke kleurwaarde op te slaan voor elk punt binnen de cirkel. Eenvoudige tekeningen kunnen daarom klein zijn. SVG is een veelgebruikt vectorformaat.
Een scherm heeft nog steeds pixels nodig. Rasterisatie zet de vormen om in een pixelraster op de gevraagde grootte. Als je vectorinstructies schaalt, blijft de geometrie van de vorm behouden; als je een bestaande rasterafbeelding vergroot, kun je geen beelddetail terughalen dat het oorspronkelijke raster nooit heeft vastgelegd.
Belangrijkste punten
- Het aantal bits van een ongecomprimeerde rasterafbeelding is breedte × hoogte × bits per pixel.
- Deel bits door 8 voordat je het aantal bytes opgeeft.
- Als je beide afmetingen verdubbelt, verviervoudigen de pixelgegevens bij dezelfde diepte.
- De ruwe beeldgegevens van video zijn bytes per beeld × beelden per seconde × duur.
- Door metadata en compressie verschilt de bestandsgrootte van een ruwe pixelberekening.
- Vectorafbeeldingen slaan vormen op die voor de weergave worden gerasterd.
5.3 Bemonster geluid en bereken de audiogrootte
Geluid is een trilling van de luchtdruk. Een microfoon zet die om in een analoog elektrisch signaal dat voortdurend verandert. Een analoog-digitaalomzetter doet regelmatige metingen, samples genoemd, en slaat elke meting als getal op.
Maak onderscheid tussen timing en meetdetail
De bemonsteringsfrequentie, gemeten in hertz, is het aantal samples dat per seconde per kanaal wordt genomen. Een frequentie van 44.100 Hz is 44,1 kHz. Cd’s gebruiken 44,1 kHz, geluidssporen bij video gebruiken vaak 48 kHz en traditionele telefoonaudio gebruikt 8 kHz. Samples leggen waarden op die tijdstippen vast; ze vormen geen continue registratie van elk tussenliggend moment.
De bitdiepte bepaalt hoeveel niveaus elke sample kan gebruiken. Acht bits geven 256 niveaus, 16 geven er 65.536 en 24 geven er 16.777.216. Een meting afronden op een niveau heet kwantisatie. Het verschil met de oorspronkelijke meting veroorzaakt een kwantisatiefout, die als ruis hoorbaar kan zijn. Meer bits bieden fijnere niveaus en verkleinen die fout.
De bemonsteringsfrequentie bepaalt het detail in de tijd; de bitdiepte bepaalt het detail in de gemeten amplitude. Als je de ene verhoogt, vervangt dat niet het verhogen van de andere.
Leg het frequentiebereik vast
Het bemonsteringstheorema vereist een bemonsteringsfrequentie die groter is dan twee keer de hoogste frequentie die je vastlegt. Om 20 kHz vast te leggen, moet de frequentie hoger zijn dan 40 kHz. Precies twee keer is onvoldoende voor een willekeurig signaal op de grens.
Bij 44,1 kHz ligt de theoretische grens onder 22,05 kHz. De ruimte boven ongeveer 20 kHz, de geschatte bovengrens van het menselijk gehoor, biedt plaats voor een anti-aliasingfilter. Frequenties boven de helft van de bemonsteringsfrequentie kunnen als onjuiste lagere frequenties verschijnen; dat heet aliasing. Een omzetter filtert die hoge frequenties vóór de bemonstering weg.
Een frequentie van 44.100 Hz geldt voor elk kanaal, niet voor de opname als gecombineerde stroom. Stereo slaat daarom elke seconde 88.200 samplewaarden op. De kanaalfactor hoort in de opslagformule omdat elk tijdstip een linker- en een rechterwaarde heeft. Die factor verdubbelt niet de hoogste frequentie die elk kanaal kan vastleggen; die grens volgt nog steeds uit de eigen bemonsteringsfrequentie van het kanaal.
Bereken ongecomprimeerde audio
Mono heeft één kanaal; stereo heeft er twee. De grootte van de gegevens is
Voor een stereo-opname van drie minuten met 44.100 Hz en 16 bits is de snelheid bit/s. Vermenigvuldig met 180 seconden voor 254.016.000 bits en deel dan door 8: 31.752.000 bytes, ongeveer 31,8 MB.
Een mono-opname van tien seconden met 8.000 Hz en 8 bits geeft bits, oftewel 80.000 bytes. Een stereo-opname met dezelfde instellingen zou twee keer zoveel gebruiken.
Kies wat je opslaat
Hogere frequenties en bitdieptes vereisen meer ruimte. Cd-instellingen zijn meestal genoeg om te luisteren; studio’s gebruiken vaak 24 bits en 48 kHz of hoger om ruimte te houden voor verwerking en bewerking.
MIDI legt instructies voor noten vast: welke noten, wanneer ze beginnen, hun sterkte en de instrumentkeuzes. Het kan veel kleiner zijn dan een bemonsterde uitvoering, maar het afspelen hangt af van de beschikbare instrumentklanken. MIDI kan de melodie van een zanger als noten beschrijven; het kan niet de daadwerkelijk opgenomen stem bevatten.
Belangrijkste punten
- De bemonsteringsfrequentie telt metingen per seconde; de bitdiepte telt bits per meting.
- Kwantisatie rondt een sample af op een van de beschikbare niveaus.
- De bemonsteringsfrequentie moet hoger zijn dan twee keer de hoogste frequentie die je vastlegt.
- Anti-aliasingfilters verwijderen hoge frequenties vóór de bemonstering.
- Het aantal audiobits is bemonsteringsfrequentie × bitdiepte × kanalen × seconden.
- MIDI slaat uitvoeringsinstructies op, geen opgenomen golfvorm.
6Comprimeer gegevens en kies een formaat
Compressie vermindert het aantal bits dat nodig is om gegevens op te slaan of te versturen. Sommige methoden vervangen herhaalde informatie door kortere beschrijvingen die exact kunnen worden teruggedraaid. Andere verwijderen details uit beeld en geluid om kleinere bestanden te krijgen. Je volgt eenvoudige codes, houdt rekening met de informatie die een decoder nodig heeft en kiest een formaat op basis van wat behouden moet blijven. Een bestand dat bedoeld is voor bewerking of exact herstel stelt andere eisen dan een definitieve stroom om te beluisteren of te bekijken.
6.1 Verliesloze coderingen en hun grenzen
Bij verliesloze compressie worden de oorspronkelijke bits bij het decomprimeren exact hersteld. Tekst, programmabestanden, spreadsheets en andere exacte gegevens hebben die eigenschap nodig. ZIP, PNG, GIF en FLAC zijn bekende verliesloze formaten. Ze benutten redundantie: herhaalde of voorspelbare informatie die korter kan worden beschreven.
Beschrijf herhaalde reeksen
Run-length encoding, of RLE, vervangt opeenvolgende identieke symbolen door een aantal en het symbool. De tekenreeks “AAAAAABBBCCCCCCCCD” van 18 tekens wordt “6A3B8C1D”, acht tekens volgens deze afspraak van aantal en symbool. Bij het decoderen wordt elk paar uitgeschreven: zes A’s, drie B’s, acht C’s en één D.
Hetzelfde idee is geschikt voor egale kleurvlakken in afbeeldingen. De pixelrij 0000000011110000 kun je beschrijven als acht nullen, vier enen en vier nullen. Een echt bestand moet vastleggen hoe aantallen en symbolen worden opgeslagen, zodat decoderen eenduidig is.
Door korte reeksen kan RLE de gegevens groter maken. “ABCD” wordt “1A1B1C1D”, een verdubbeling van het aantal tekens nog vóór een eventuele header. Compressie werkt alleen als de besparing groter is dan de kosten van het beschrijven van het patroon.
Verwijs naar een herhaalde reeks
Een woordenboekmethode vervangt een herhaalde reeks door een verwijzing. Methoden uit de LZ-familie liggen ten grondslag aan formaten zoals ZIP en PNG. In “hallo en dan hallo” kan het tweede “hallo” worden vervangen door een instructie om 13 tekens terug te gaan en er vijf te kopiëren. Spaties tellen als tekens. De decoder beschikt al over die eerdere tekst en kan de reeks uit de verwijzing reproduceren.
Geef veelvoorkomende symbolen kortere codes
Een code met variabele lengte gebruikt verschillende aantallen bits voor verschillende symbolen. Huffmancodering bouwt codes op basis van de frequentie van symbolen. In “ABRACADABRA” komt A vijf keer voor, B en R elk twee keer en C en D elk één keer. Een code met vaste breedte voor vijf symbolen heeft drie bits per symbool nodig, oftewel 33 bits voor elf letters.
Een geschikte prefixvrije code is A = 0, B = 10, R = 110, C = 1110 en D = 1111. De gecodeerde gegevens gebruiken bits. De codetabel voegt overhead toe, dus 23 bits alleen is niet de volledige bestandsgrootte.
Prefixvrij betekent dat geen code van een symbool het begin is van de code van een ander symbool. Als je 0110 leest, krijg je daarom A gevolgd door R zonder dat scheidingstekens nodig zijn. Door deze eigenschap kan een huffmandecoder een symbool herkennen zodra de code eindigt.
De decoder moet zowel de coderingsafspraak als de gegevens kennen. Voor een stroom met huffmancodering heeft de decoder de koppeling tussen symbolen en codes nodig; voor RLE moet die een aantal van een symbool kunnen onderscheiden. Een klein bericht kan bits aan gegevens besparen maar in totaal groter worden als deze beschrijving wordt meegerekend. Vergelijk de volledige oorspronkelijke en gecodeerde grootte om te bepalen of een methode het bestand daadwerkelijk heeft verkleind.
Meet de besparing en herken grenzen
De compressieverhouding is de oorspronkelijke grootte gedeeld door de gecomprimeerde grootte. Van 6 MB naar 2 MB gaan geeft 3:1. Gebruik aan beide kanten dezelfde eenheid.
Geen enkele verliesloze methode kan elk mogelijk bestand korter maken. Er zijn verschillende invoeren van n bits, maar slechts bitreeksen die korter zijn dan n bits. Voor exact herstel moeten verschillende originelen onderscheidbaar blijven, dus kunnen ze niet allemaal een kortere uitvoer krijgen. Willekeurige gegevens en al gecomprimeerde bestanden worden vaak weinig kleiner of groeien door toegevoegde overhead.
Belangrijkste punten
- Verliesloos decomprimeren reproduceert de oorspronkelijke bits exact.
- RLE beschrijft identieke opeenvolgende symbolen met aantallen.
- Woordenboekmethoden vervangen herhaalde reeksen door verwijzingen.
- Huffmancodering kent kortere codes toe op basis van symboolfrequenties.
- Een prefixvrije code maakt de grenzen tussen symbolen herkenbaar zonder scheidingstekens.
- De compressieverhouding vergelijkt de oorspronkelijke grootte met de gecomprimeerde grootte.
- Geen enkele verliesloze methode maakt elke mogelijke invoer korter.
6.2 Formaten met verlies en kwaliteitskeuzes
Compressie met verlies verwijdert informatie om de bestandsgrootte te verkleinen. Bij het decomprimeren ontstaat een versie die dicht bij het origineel ligt, maar waarin bepaalde details blijvend ontbreken. Foto’s, muziek, spraak en video kunnen geselecteerde verliezen verdragen die exacte tekst of programmagegevens niet kunnen verdragen.
Comprimeer afbeeldingen op basis van visueel belang
JPEG maakt gebruik van de verschillende gevoeligheid van het menselijk oog voor helderheid, kleur en fijne details. Een gebruikelijke JPEG verlaagt de resolutie van fijne kleurdetails en rondt fijne beelddetails af die in blokken van 8 × 8 worden weergegeven. De kwaliteitsinstelling bepaalt hoe sterk informatie wordt weggelaten. Sterkere compressie kan blokvorming of vervaging en randecho’s bij scherpe randen veroorzaken.
Een foto kan vaak ongeveer 10:1 bereiken met weinig zichtbaar verlies. Bij die verhouding zou een afbeelding met 6.220.800 bytes aan ruwe pixelgegevens gecomprimeerd ongeveer 622.080 bytes gebruiken, circa 0,6 MB. De verhouding is een voorbeeld, geen vaste eigenschap van elke JPEG.
Comprimeer geluid op basis van wat hoorbaar is
MP3 en AAC gebruiken perceptuele codering. Een zacht geluid kan worden gemaskeerd door een harder geluid met een nabije frequentie, zodat de encoder minder bits kan besteden aan informatie die een luisteraar waarschijnlijk niet hoort. Een kleiner bestand kan nog steeds vrijwel hetzelfde klinken als het origineel.
Bij een constante bitsnelheid is de grootte in bits gelijk aan bitsnelheid maal duur. Bij 128 kbit/s heeft een opname van drie minuten bits nodig, oftewel 2.880.000 bytes, ongeveer 2,9 MB. Dat is ongeveer een elfde van de 1.411,2 kbit/s van ongecomprimeerde cd-audio. De gecomprimeerde snelheid beschrijft de gecodeerde stroom al; vermenigvuldig die niet opnieuw met de oorspronkelijke bitdiepte per sample.
Benut overeenkomsten tussen videobeelden
Opeenvolgende beelden tonen vaak bijna dezelfde scène. Videoformaten zoals H.264 en AV1 comprimeren beelddetails en beschrijven veel beelden met veranderingen of voorspellingen op basis van andere beelden. Zo wordt herhaalde informatie zowel in de tijd als binnen elk beeld verwijderd.
Stem het formaat af op het gebruik
| Gebruik | Geschikte keuze | Reden |
|---|---|---|
| Exacte tekst, code of gegevens | Verliesloos archief | Elke bit moet behouden blijven |
| Foto om te delen | JPEG of een ander afbeeldingsformaat met verlies | Kleine omvang met aanvaardbaar visueel verlies |
| Schermafbeelding of logo | PNG | Behoudt scherpe randen en egale kleuren |
| Muziek voor streaming | AAC, MP3 of Opus | Bespaart overdrachtscapaciteit |
| Audiomaster voor archivering | FLAC | Exact herstel van de audiosamples |
Bewaar een verliesloos origineel voor toekomstige bewerking. Herhaald decoderen en opnieuw coderen met verlies kan generatieverlies toevoegen. Als je een JPEG met verlies naar PNG omzet, blijven de huidige gedecodeerde pixels behouden, maar kunnen eerder verwijderde details niet worden hersteld.
Meer compressie kan kwaliteit, verwerkingstijd of beide kosten. De bruikbare keuze hangt af van de inhoud en het gebruik van een bestand; het kleinste bestand is niet altijd het bruikbaarst.
Belangrijkste punten
- Compressie met verlies verwijdert geselecteerde informatie blijvend.
- JPEG benut de gevoeligheid van het oog; audio met verlies gebruikt perceptuele codering.
- De grootte van een gecomprimeerde stroom volgt uit bitsnelheid × duur.
- Bewaar een verliesloos origineel als toekomstige bewerking of exact herstel belangrijk is.
- Als je een bestand met verlies omzet naar een verliesloos formaat, kun je verwijderde informatie niet terughalen.
Binaire getallen en gegevensrepresentatie: voorbeelden
1Maak een code en lees de bits
12 stappen
- 1IntroductieEén patroon, meerdere interpretaties
Een opgeslagen patroon heeft twee afzonderlijke kenmerken: hoeveel bits het inneemt en hoe een lezer die interpreteert. De acht bits 01000001 kunnen een getal, een tekstteken of een kleurintensiteit betekenen.
We kiezen eerst genoeg bits om een verzameling waarden te onderscheiden en lezen daarna een numeriek patroon met binaire plaatswaarden en hexadecimale notatie. Een andere notatie verandert wat je opschrijft, terwijl de waarde behouden blijft.
- 2UitlegTel mogelijkheden door te verdubbelen
Elke bit heeft twee mogelijkheden, dus verdubbelt elke toegevoegde bit het aantal patronen. Twee bits geven 00, 01, 10 en 11; drie bits geven acht patronen. In het algemeen geven n bits patronen.
Om 26 letters te onderscheiden zijn vier bits niet genoeg, omdat ze maar 16 patronen geven. Vijf bits geven er 32 en laten zes patronen ongebruikt. Een code hoeft niet elk beschikbaar patroon te gebruiken.
- 3UitdagingKies een veld voor categorieën
Een apparaat moet 90 categorieën onderscheiden. Wat is het kleinste aantal bits waarmee je die kunt coderen? Hoeveel patronen blijven ongebruikt?
---reveal---
Zes bits geven 64 patronen, te weinig. Zeven geven er 128, dus heeft het veld zeven bits nodig en blijven 38 patronen ongebruikt. Het grootste numerieke label kan 89 zijn als de labels bij nul beginnen; die grenswaarde is iets anders dan het aantal van 90 categorieën.
- 4VerbandLet op hoofd- en kleine letters bij eenheden
Een byte heeft acht bits. Daarom maakt het uit of de letter van de eenheid een hoofdletter of een kleine letter is: b betekent bit en B betekent byte. Een verbinding van 40 Mbit/s heeft een ideaal maximum van 5 MB/s voor de gegevens, vóór overhead.
Ook de voorvoegsels van eenheden zijn van belang. Eén MB betekent één miljoen bytes, terwijl één MiB 1.048.576 bytes betekent. Als je een opgeslagen hoeveelheid van MB naar MiB omrekent, verandert de numerieke waarde zonder dat er gegevens verdwijnen.
- 5UitlegZet binaire plaatswaarden op een rij
De meest rechtse plaatswaarde voor gehele getallen is 1. Naar links volgen 2, 4, 8, 16, 32, 64, enzovoort. Een 1 selecteert een plaatswaarde en een 0 laat die weg.
Voor 101101 zijn de geselecteerde plaatswaarden 32, 8, 4 en 1, samen 45. Voorloopnullen kunnen een bitbreedte vullen zonder deze plaatswaarden te veranderen. Een ontbrekende nul binnen het patroon zou sommige cijfers verschuiven en de waarde veranderen.
- 6VoorbeeldKies de machten voor 156
De grootste macht van twee die niet groter is dan 156, is 128. Trek die af; er blijft 28 over. De plaatswaarden 64 en 32 passen niet, dus krijgen ze nullen.
Trek 16 af van 28; er blijft 12 over. Trek 8 af, zodat 4 overblijft, en trek dan 4 af om op nul uit te komen. De laatste twee posities, 2 en 1, krijgen nullen. Over de posities van 128 tot en met 1 zijn de bits 10011100. Door elke ongebruikte positie te behouden, voorkom je dat de gekozen machten verschuiven.
- 7TipKeer de resten bij gehele deling om
Herhaald delen is een andere weg naar hetzelfde patroon. Als je een geheel getal door twee deelt, krijg je de laatste bit als rest. Door het quotiënt te delen vind je de volgende bit links daarvan.
Voor 156 krijg je de resten 0, 0, 1, 1, 1, 0, 0, 1. Lees van de laatste naar de eerste om 10011100 te krijgen. Die omgekeerde volgorde is nodig omdat je bij het delen eerst de minst significante positie vindt.
- 8UitdagingReken een nieuwe waarde om en controleer die
Schrijf het decimale getal 109 in acht binaire posities en leg daarna met je resultaat uit of 109 oneven is.
---reveal---
De gekozen machten zijn 64, 32, 8, 4 en 1, dus is het patroon 01101101. Hun som is 109, wat de omrekening bevestigt. De laatste bit is 1; alle andere posities dragen even hoeveelheden bij, zodat een oneven geheel getal overblijft. De voorloopnul vult de byte zonder de waarde te veranderen.
- 9UitlegVervang nibbles door hexadecimale cijfers
Hexadecimale notatie heeft zestien cijfers: 0–9 gevolgd door A–F voor tien tot en met vijftien. Vier bits onderscheiden ook zestien patronen, dus duidt elk hexadecimaal cijfer één nibble aan.
Splits 10011100 in 1001 en 1100. De eerste groep is negen en de tweede is twaalf, geschreven als C. Het resultaat is 0x9C. Hexadecimale notatie gebruikt vier keer zo weinig cijfers als binaire notatie, terwijl de directe koppeling met groepen binnen de byte behouden blijft.
- 10VoorbeeldGroepeer een kort patroon vanaf rechts
Om 101101 om te rekenen, maak je groepen vanaf rechts: 10 en 1101. Vul de meest linkse groep aan tot 0010. De groepen geven nu hexadecimaal 2 en D, dus is de waarde 0x2D.
Controleer met hexadecimale plaatswaarden: twee keer zestien plus dertien keer één is 45. Als je vanaf links groepeert, komt de laatste korte groep op de verkeerde plaats. Binnen een volledige hexadecimale omzetting moet elk cijfer alle vier de bits behouden.
- 11UitdagingVerbind bits, bitbreedte en hexadecimale notatie
Een veld zonder teken met vaste bitbreedte bevat 0xB4. Hoeveel bits geven de twee hexadecimale cijfers weer, wat is het binaire patroon en welke decimale waarde bevat het veld?
---reveal---
Twee hexadecimale cijfers geven acht bits weer. B wordt 1011 en 4 wordt 0100, dus is de byte 10110100. De geselecteerde plaatswaarden zijn samen 128 + 32 + 16 + 4 = 180. Ook elf keer zestien plus vier geeft 180.
- 12SamenvattingDrie controles voor een opgeslagen waarde
Controleer capaciteit, notatie en eenheden afzonderlijk. Een veld heeft genoeg patronen nodig voor alle mogelijke waarden. Binaire notatie selecteert machten van twee; hexadecimale notatie groepeert die bits vanaf rechts per vier.
De opgeslagen waarde blijft behouden als je het grondtal van de schrijfwijze of de opslageenheid verandert. Een andere interpretatie van de gegevens kan dezelfde bits een andere betekenis geven, dus horen het patroon en de leesregel bij elkaar.
2Lees waarden met teken en behoud hun bitbreedte
11 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieEen bitbreedte heeft een interpretatie nodig
- 2UitlegReserveer een patroon voor nul
- 3VoorbeeldVolg cyclische overloop zonder teken
- 4UitdagingKies genoeg ruimte voor een telling
- 5UitlegGeef de voorste bit een negatief gewicht
- 6VoorbeeldBegin het patroon voor −45
- 7VoorbeeldVoltooi de tekenomkering
- 8UitdagingCodeer een ander negatief geheel getal
- 9KernpuntBreid de tekenbit uit, niet alleen de nullen
- 10UitdagingMaak breder voordat je het teken omkeert
- 11SamenvattingBewaar de regel bij het patroon
3Bouw een drijvendekommacodering op
17 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieEen waarde en een schaal
- 2UitlegLees de breukposities
- 3VoorbeeldMaak een eindige breuk
- 4KernpuntVoorspel of de cijfers eindigen
- 5UitdagingBepaal de schaal in vastekommarepresentatie
- 6UitlegHerken de velden
- 7VoorbeeldSchrijf 6,25 binair
- 8VoorbeeldCodeer de exponent
- 9VoorbeeldSla alleen de fractie op
- 10VoorbeeldVoeg de drie velden samen
- 11UitdagingDecodeer een andere normale waarde
- 12TipDeel eerst gereserveerde patronen in
- 13UitlegMaak onderscheid tussen bereik en afstand
- 14KernpuntZie de afstand groeien
- 15UitdagingRond een geheel getal halverwege af
- 16UitdagingKies een type voor een exact bedrag
- 17SamenvattingLees het formaat vóór de waarde
4Volg tekst van tekens naar bytes
12 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieTekst heeft een afspraak nodig
- 2UitlegZoek de ASCII-tekencode
- 3VoorbeeldCodeer letters en leestekens
- 4UitdagingBepaal de numerieke waarde van een cijfer
- 5VerbandWaarom één byte niet genoeg was
- 6UitlegIdentificeer vóór het coderen
- 7VoorbeeldSplits de bits voor é
- 8VoorbeeldVoltooi de twee gecodeerde bytes
- 9UitdagingTel een tekenreeks met verschillende schriftsystemen
- 10KernpuntEén uiterlijk kan twee vormen hebben
- 11UitdagingOnderzoek het verminkte woord
- 12SamenvattingHoud drie tellingen apart
5Bereken de benodigde opslagruimte voor afbeeldingen en opnamen
15 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieTel waarden en daarna bits per waarde
- 2UitlegBouw een RGB-pixel op
- 3VerbandVoeg transparantie toe of gebruik een kleurenpalet
- 4UitdagingLees een kleur en de kleurdiepte
- 5VoorbeeldBegin met het pixelraster
- 6VoorbeeldReken de afbeelding om naar bytes
- 7UitdagingSchaal het raster en voeg videobeelden toe
- 8KernpuntEen tekening kan instructies opslaan
- 9UitlegBemonster timing en amplitude afzonderlijk
- 10UitlegFilter vóór het bemonsteren
- 11VoorbeeldBepaal eerst de audiosnelheid
- 12UitdagingBereken een andere opname
- 13VerbandNoten kunnen een golfvorm vervangen
- 14UitdagingVergelijk twee veranderingen in opslag
- 15SamenvattingHoud de factoren en eenheden zichtbaar
6Comprimeer zonder grootte en getrouwheid te verwarren
12 stappen
Sla deze les op om elke Walkthrough stap voor stap te volgen.
- 1IntroductieTwee manieren om een kleiner bestand te krijgen
- 2UitlegVervang herhaalde reeksen door aantallen
- 3UitdagingProbeer lange en korte herhaalde reeksen
- 4VerbandVerwijs naar een eerder gevonden reeks
- 5VoorbeeldGeef veelvoorkomende symbolen korte codes
- 6UitdagingDecodeer de stroom op volgorde
- 7KernpuntSommige invoeren moeten groot blijven
- 8UitlegVerwijder minder opvallende mediadetails
- 9VoorbeeldGebruik een gecomprimeerde bitsnelheid direct
- 10UitdagingBescherm een masterbestand terwijl je een kopie deelt
- 11UitdagingVergelijk een verhouding met een overdrachtsbudget
- 12SamenvattingStem de garantie af op het doel
Binaire getallen en gegevensrepresentatie: oefenvragen
Set 1: Lees patronen en schat de benodigde opslagruimte10 Oefenvragen
Vraag 1 van 10
Toon antwoordVerberg antwoord
Vraag 2 van 10
Toon antwoordVerberg antwoord
Vraag 3 van 10
Toon antwoordVerberg antwoord
Vraag 4 van 10
Toon antwoordVerberg antwoord
Vraag 5 van 10
Toon antwoordVerberg antwoord
Vraag 6 van 10
Toon antwoordVerberg antwoord
Vraag 7 van 10
Toon antwoordVerberg antwoord
Vraag 8 van 10
Toon antwoordVerberg antwoord
Vraag 9 van 10
Toon antwoordVerberg antwoord
Vraag 10 van 10
Toon antwoordVerberg antwoord
Set 2: Pas formaten toe en bereken gegevensgroottes10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Set 3: Interpreteer dezelfde bits op verschillende manieren10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Set 4: Onderzoek fouten en verbind representaties10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Set 5: Combineer grenzen, coderingen en keuzes over grootte10 Oefenvragen
Sla deze les op om elk antwoord te zien en elke set te oefenen.
Vraag 1 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 2 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 3 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 4 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 5 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 6 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 7 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 8 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 9 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Vraag 10 van 10
Toon antwoordVerberg antwoord
Sla deze les op om dit antwoord te zien.
Kom je niet uit je eigen opgave? Huiswerkhulp
Kernbegrippen
A
afbeeldingsmetadata
afronden naar even bij gelijke afstand
afrondingsfout
alfakanaal
aliasing
analoog signaal
ASCII
audiobitdiepte
B
bemonsteringsfrequentie
bemonsteringstheorema
bereik
besturingsteken
binair IEC-voorvoegsel
binair talstelsel
binaire komma
bit
bitsnelheid
byte
C
codepagina
codepunt
compressie
compressie met verlies
compressieartefact
compressieverhouding
cyclische overloop
D
drijvendekommarepresentatie
E
eindige binaire ontwikkeling
exponentverschuiving
G
gegevenstype
geheel getal zonder teken
generatieverlies
grondtal
H
hexadecimaal cijfer
hexadecimaal talstelsel
huffmancodering
I
IEEE 754
impliciete bit
K
kleurdiepte
kleurenpalet
kwantisatie
M
mantisse
meest significante bit
MIDI
minst significante bit
N
NaN
nibble
normalisatie
O
onderloop
overloop
P
perceptuele codering
pixel
positienotatie
precisie
prefixvrije code
R
rasterafbeelding
rasterisatie
redundantie
resolutie
RGB
run-length encoding
S
sample
SI-voorvoegsel voor opslageenheden
subnormale waarde
T
teken-grootterepresentatie
tekenbit
tekencode
tekencodering
tekenomkering
tekenuitbreiding
tweecomplement
U
Unicode
UTF-8
UTF-16
V
vaste bitbreedte
vastekommarepresentatie
vectorafbeeldingen
verliesloze compressie
verminkte tekst door verkeerde tekencodering
videobeeld
W
woordenboekmethode
#
0x-voorvoegsel
- 1Problemen oplossen met algoritmen
- 2Binaire getallen en gegevensrepresentatie
- 3Hoe computers werken
- 4Zoek- en sorteeralgoritmen
- 5Programmeertalen
- 6Pakketten, IP-adressen en DNS
- 7Ethiek van technologie
Over deze les
Door StudeliFout melden
Maak je eigen Studiemateriaal
Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.