# Basiskennis informatica/Capaciteit

De hoeveelheid informatie die opgeslagen of verwerkt kan worden, wordt gemeten in bits, of in de daarvan afgeleide eenheid byte.

## Bit

De bit is de kleinste eenheid van informatie, namelijk een symbool of signaal dat twee waarden kan aannemen: aan of uit, ja of nee, hoog of laag, geladen of niet-geladen. Het binaire talstelsel stelt deze waarden voor met 1 en 0. Het woord bit is een portmanteau (samentrekking) van de Engelse woorden binary en digit. Er zit ook een woordspeling in, want bit betekent ook beetje.
M.b.t. de toestand "aan" of "uit" kan de analogie met een lamp gebruikt worden. De toestand waarin een lamp zich kan bevinden kan met behulp van 1 bit uitgedrukt/opgeslagen worden. Logisch is bv. '0 = uit' en '1 = aan' (maar indien gewenst kan men het ook andersom gebruiken).
Toestand lamp: Lamp uit (0) Lamp aan (1) Eén bit bevat de informatie van de twee hierboven weergegeven lamp toestanden. Informatie in één bit:

### Bitreeks

Bits worden uiteraard met elkaar gecombineerd tot grotere gehelen - bitreeksen genaamd - om zo meer informatie te kunnen bevatten. Bijvoorbeeld:

### Bitruimte

Het aantal bits die beschikbaar zijn om iets op te slaan, te verzenden of te adresseren, de bitruimte, ligt vaak vast. Dit aantal legt dus een beperking op aan de lengte van de bitreeks en dus het aantal gegevens die men kan behandelen. Met 1 bit (.) heeft men slechts twee mogelijkheden, nl. 0 of 1. Met 2 bits (..) zijn de mogelijkheden 00, 01, 10 en 11 (aantal = # = 4). Met 3 bits (...) zijn de mogelijkheden 000, 001, 010, 011, 100, 101, 110, 111 (#=8).
Voor een bitruimte van 16 bits (................) is het heel veel werk om alle mogelijkheden te noteren. Een berekening voor het aantal is wel eenvoudig: voor de eerste positie zijn er 2 mogelijkheden, evenals voor de tweede en elke volgende positie. Het totaal aantal mogelijkheden verkrijgen we door het aantal mogelijkheden voor elke positie met elkaar te vermenigvuldigen. Het aantal mogelijkheden bij een bitruimte van 16 bits is dus gelijk aan:
    2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 2$^{16}$ = 65536.
De bitruimte bepaalt ook het grootst mogelijke getal dat je nog kan voorstellen: het maximum. Binair betekent dit dat op iedere bitpositie een 1 staat. Een bitruimte van 3 bits (...) betekent 111 als grootste binaire getal. Als je leert over talstelsels, dan zal je leren dat 111$_{(2)}$=7$_{(10)}$. Zonder kennis van talstelsels kan je het ook berekenen. Enkele voorbeelden:
| Bitruimte | 3 | 16 | 32 |
| Aantal mogelijkheden | 8=2$^3$ | 65 536=2$^{16}$‬ | 4 294 967 296‬=2$^{32}$ |
| Grootste, decimale getal | 7=2$^3$-1 | 65 535=2$^{16}$-1 | 4 294 967 295=2$^{32}$-1 |
De term bitruimte is een algemene term, die van toepassing is op verschillende soorten data. Voor sommige specifieke data bestaat een eigen term voor bitruimte. Zo spreekt men bij kleuren over kleurendiepte of kleurdiepte en bij geheugenadressen over adresruimte.
Hieronder drie hypothetische voorbeelden met een verschil in bitruimte (en dus in het aantal adressen dat kan worden gevormd) en/of hoeveel bytes er per cel in het RAM-geheugen kan worden opgeslagen. We merken dat we extra capaciteit kunnen verkrijgen door een grotere bitruimte (per bit extra, dubbel zoveel capaciteit) en/of door meer bytes per cel te bewaren.
De gekozen bitruimte is al enkele keren in de IT-geschiedenis te weinig gebleken. Niet alleen bij de adresruimte van het RAM-geheugen (32 bits), maar bv. ook bij IPv4 (32 bits). Bij een te kleine kleurendiepte kan er bv. colour banding optreden.
Millenniumbug of Y2K-bug
De millenniumbug was een probleem dat in 20e eeuwse computersystemen ontstond doordat bij het opslaan van de datum alleen de laatste twee cijfers van het jaar werden gebruikt. Zo werd 29 december 1977 bijvoorbeeld opgeslagen als 29-12-77. In de beginperiode van de computer werd dat gedaan om te besparen op de toen erg dure geheugenruimte.
De millenniumbug zou problemen opleveren tijdens de overgang naar het jaar 2000, doordat de representatie van 1 januari 2000 gelijk is aan die van 1 januari 1900: 01-01-00. Voorraadsystemen zouden denken dat een product met vervaldatum 01-01-00 al een eeuw oud was. Of iemand die dan geboren was, zou a.h.w. 100 jaar oud zijn en als pasgeborene al recht hebben op een pensioen.
Op 1 januari 2020 waren er opnieuw problemen, omdat sommige programmeurs de Y2K-bug oplosten door 00 niet te herkennen als 1900, maar als een nieuw jaar (2000) en dat ze na 99 (dus 1999) zouden doortellen tot 20 (dus 2020). Eind 1999 dachten ze dat alle oude systemen tegen 2020 wel vervangen zouden zijn.
We zijn er trouwens nog niet vanaf, want in 2038 kunnen er opnieuw problemen zijn. Unix telt nl. het aantal dagen vanaf 1 januari 1970. En bij de oude systemen zou op 19 januari 2038 de bitruimte te klein kunnen zijn...
(nl) Twintig jaar oude millenniumbug sloeg op 1 januari opnieuw toe. VRT (2020-01-08). (nl) Millenniumbug doet met 20 jaar vertraging dan toch computers crashen. tweakers.net (2020-01-09).
Oude gps-systemen kunnen verkeerde informatie weergeven
In het GPS-signaal zit de actuele week en de hoeveelheid seconden sinds het begin van die week. De ontvanger kan dit signaal weer vertalen in een formaat op basis van dagen, maanden en jaren. Het probleem is dat die weekinformatie wordt verstuurd in een binair getal van 10bit. Dat betekent dat er in totaal 1024 weken via het signaal verstuurd kunnen worden. Week 0 begon op 21 augustus in 1999, dus op 6 april 2019 zijn de 1024 weken voorbij en beginnen de satellieten weer vanaf '0' te tellen.
(nl) Oude gps-systemen kunnen vanaf volgende maand verkeerde informatie weergeven. tweakers.net (2019-03-05).

## Byte

Een byte is het kleinste adresseerbare deel van het computergeheugen. Hiermee bedoelt men dat het niet mogelijk is om minder dan één byte uit het geheugen te lezen of ernaar te schrijven. In de meeste technologieën bestaat een byte uit 8 bits, wat je kan onthouden door de samentrekking van by eight.
Merk het verschil in notering tussen de kleine b voor bits en de grote B voor bytes !

## Veelvouden van bytes

Net als in andere wetenschappelijke domeinen definieert men veelvouden voor de basiseenheden. Zo kennen we de kilometer als 1000 meter of de megawatt als 1.000.000 watt. Analoog definieert men veelvouden voor bits of bytes. Maar hier wordt het wat ingewikkelder.
Alhoewel het prefix kilo- 1000 betekent, verwijst de term kilobyte met als symbool kB naar ofwel 1024 (2$^{10}$) bytes ofwel 1000 (10$^3$) bytes, al naargelang de context. In dit geval zijn er "slechts" 24 bytes verschil, maar bij grotere waarden zoals terabyte (TB) wordt het verschil wel heel groot: 2$^{40}$ - 10$^{12}$ = 99.511.627.776 bytes! Dit kan tot verwarring leiden.
Vanwege deze verwarring heeft het IEC in 2003 een nieuwe eenheid bedacht, nl. de kibibyte. Het binaire prefix kibi staat voor 1024 en dus is een kibibyte 1024 bytes. Het eenheidsymbool voor de kibibyte is KiB. Hiermee wordt het verschil tussen kibi (1024) en kilo (1000) duidelijk.
    Veelvouden van bytes met SI-voorvoegsel met IEC-voorvoegsel (binair) afwijking tussen SI en binair symboolnaamvoor- voegselwaarde symboolnaamvoor- voegselwaarde kBkilobytekilo1000$^1$ = 10$^3$ KiBkibibytekibi1024$^1$ =2$^{10}$ 2,4% MBmegabytemega1000$^2$ = 10$^6$ MiBmebibytemebi1024$^2$ =2$^{20}$ 4,9% GBgigabytegiga1000$^3$ = 10$^9$ GiBgibibytegibi1024$^3$ =2$^{30}$ 7,4% TBterabytetera1000$^4$ = 10$^{12}$ TiBtebibytetebi1024$^4$ =2$^{40}$ 10,0% PBpetabytepeta1000$^5$ = 10$^{15}$ PiBpebibytepebi1024$^5$ =2$^{50}$ 12,6% EBexabyteexa1000$^6$ = 10$^{18}$ EiBexbibyteexbi1024$^6$ =2$^{60}$ 15,3% ZBzettabytezetta1000$^7$ = 10$^{21}$ ZiBzebibytezebi1024$^7$ =2$^{70}$ 18,1% YByottabyteyotta1000$^8$ = 10$^{24}$ YiByobibyteyobi1024$^8$ =2$^{80}$ 20,9%
Western Digital aangeklaagd om verschil GB en GiB
In de Verenigde Staten was Western Digital aangeklaagd wegens 'te kleine' harde schijven. Het probleem van de advocaten was dat WD adverteerde met gigabytes van 1.000.000.000 bytes, terwijl de meeste besturingssystemen de schijfgrootte in gigabytes van 1.073.741.824 bytes weergeven, zodat de bruikbare capaciteit bijna 7,4% kleiner lijkt. Strikt gezien had Western Digital gelijk, maar vele eindgebruikers dachten anders.
(nl) Western Digital aangeklaagd om verschil GB en GiB. tweakers.net (2006-03-23).
Het gebruik van kibi is helaas nog verre van ingeburgerd en zo blijft de verwarring bestaan bij programma's, besturingssystemen, reclamefolders en hardwarespecificaties:
* Heel wat programma's van Microsoft gebruiken de kilo als 1024, oa. Windows Verkenner, computerbeheer en de systeemmonitor.
* Heel wat programma's onder GNOME (en daarmee ook Ubuntu) maken een duidelijk onderscheid tussen kibi (1024) en kilo (1000), o.a. de bestandsbeheerder Nautilus, GParted (om partities aan te maken) en hun systeemmonitor. Er zijn ook 'losse' programma's die dit onderscheid maken: zo zal de ftp-client FileZilla de bestandsoverdracht in MiB/s aangeven. Op andere plaatsen gebruikt hij x bytes in y seconden.
* SI vs IEC
* GParted
* Gnome System Monitor
* Bittornado
De verschillende eenheden kunnen natuurlijk eenvoudig in elkaar omgerekend worden. Enkele voorbeelden van omzettingen:
* Bij een pc kan er 1 byte per geheugencel van het intern geheugen worden aangesproken. Stel dat hij een 32-bit adresruimte (bitruimte) heeft. Wat is de maximum capaciteit die kan worden aangesproken?
** Het aantal mogelijke adressen is 2$^{32}$=4 294 967 296
** In één geheugencel zit 1 byte, dus het geheel is 4 294 967 296 * 1 = 4 294 967 296 B = 4 294 967 296 / 2$^{30}$ = 4 GiB
* De 32-bit adresruimte bleek te weinig te zijn, daar men na een tijd meer dan 4 GiB wou kunnen aanspreken/adresseren. Er kwam een uitbreiding tot 64 bits. Wat is nu de maximumcapaciteit?
** Het aantal mogelijke adressen is 2$^{64}$=18 446 744 073 709 551 616. Merk op dat dit niet 2 maal zo veel mogelijke adressen toelaat t.o.v. de 32 bit adresruimte, maar wel 2$^{32}$ keer meer!
** In één geheugencel zit 1 byte, dus het geheel is 18 446 744 073 709 551 616 * 1 = 18 446 744 073 709 551 616 B = 18 446 744 073 709 551 616 / 2$^{40}$ = 16 777 216 TiB. Dat is 16 EiB (exbibyte)! Merk op dat dit theoretisch maximum beperkt wordt door de chipset, waardoor een bepaald moederbord bv. "slechts" 8 GiB aankan.
* De systeemmonitor onder Ubuntu geeft aan dat er 1,4 GiB in gebruik is, en de vraag is hoeveel GB dat is. Dan wordt de omzetting:
       $1{,}4\ {\rm {{\color {red}Gi}B}}=1{,}4\times {\color {red}2^{30}}\ {\rm {B}}={\frac {1{,}4\times 2^{30}}{\color {green}10^{9}}}\ {\rm {{\color {green}G}B}}\approx 1{,}5\ {\rm {GB}}$
* De systeemmonitor onder Ubuntu geeft aan dat de downloadsnelheid 1,2 MiB/s is. De vraagt is hoeveel Mbps dat is, om zo te weten of het maximum uit de netwerkkaart gehaald wordt. Dan wordt de omzetting:
       $1{,}2\ {\rm {MiB/s}}=1{,}2\ {\rm {{\color {red}Mi}Bps}}=1{,}2\times {\color {red}2^{20}}\ {\rm {{\color {green}B}ps}}=\left(1{,}2\times 2^{20}\right)\times {\rm {{\color {green}8\;b}ps}}={\frac {1{,}2\times 2^{20}\times 8}{\color {blue}10^{6}}}\ {\rm {{\color {blue}M}bps}}\approx 10\ {\rm {Mbps}}$
* ↑ Deze superuser.com-vraag legt het verschil uit tussen geheugen- en adresruimte door een vergelijking met auto's en parkeerplaatsen.
* ↑ Groter adresbereik bij IPv6
* ↑ Er bestaan echter systemen (bv. bitslicers en microcontrollers) met een byte bestaande uit 5, 7, 9 of 12 of zelfs 14 bits. Voor deze cursus wordt er uitgegaan van een byte bestaande uit 8 bits, het meest gebruikelijke.
* ↑ De 4 GiB is een theoretische grens. Het is mogelijk om met 32 bit adresruimte voorbij de 4 GiB grens te gaan, maar dit bleek een nachtmerrie te zijn om te implementeren. Getuige dit interview met Linus Torvalds, die mee ontwikkelt aan de Linux-kernel.