Over bits & bytes
Arnout van Kempen over rommelen in een digitale wereld.
Even een tussendoortje, volgende week verder met COBOL, geen zorgen. Maar dit moest ik even kwijt. Recent hoorde ik in de podcast Advent of Computing van Sean Haas, de historie van de byte. Zelf ben ik opgegroeid met het verhaal dat een byte bestaat uit 8 bits, en daarom ook zo heet: by eight, samengetrokken tot byte. Net zoals het woord bit een samentrekking is van binary digit.
Maar wat blijkt nu: dat klopt niet.
In de begindagen van de computer werd de kleinst adresseerbare eenheid geheugen, tevens veelal de lengte van een register, een word genoemd. Computers hadden in die tijd opvallend lange word-lengtes en die lengte stond nog allerminst vast. Nieuw model, nieuwe word-lengte. Toen IBM aan de 7030 aan het werk was, werd deze ontworpen met een word-lengte van 60 bits. Voor wetenschappelijk rekenwerk, waar de 7030 voor bedoeld was, is dat handig. Voor tekst is het bizar veel. En voor simpel rekenwerk trouwens ook. Wie met het toen wel redelijk gangbare Binary Coded Decimal wilde werken, had 4 bits nodig voor één cijfer en als je het hele alfabet en alle cijfer-tekens wil coderen, heb je genoeg aan 6 bits. Werner Buchholz, die aan de 7030 werkte, introduceerde in 1956 de term byte voor een deel van een word, groot genoeg om één data-element mee te coderen. En omdat het van het gebruik afhangt hoeveel bit je nodig hebt, werd een byte gedefinieerd als een deel van een word van 1, 2, 3, 4, 5 of 6 bits. Dat is handig als je een 60 bits word hebt; immers je byte past dan altijd precies een geheel aantal malen in een word. 60 is immers deelbaar door 1, 2, 3, 4, 5 en 6.
Een bijkomende aardigheid is dat in die tijd de ponskaart door IBM nog steeds werd gebruikt. En laat die nu al sinds 1928 een standaard formaat hebben van 80 kolommen bij 12 rijen. Inderdaad, daar komt de 80-kolomsmonitor vandaan, maar het gaat even om die 12. Dat is precies twee 6-bits bytes, daarmee kan je dus netjes twee letters/cijfers coderen.
Maar waar komt dan die 8-bits byte vandaan? Toen IBM naast letters ook nog onderscheid wilde maken tussen hoofdletters en kleine letters, waren 6 bits niet meer genoeg. In Amerika ontwikkelde men de ASCII-set, een 7 bits tekenset, waarmee Amerikanen ongeveer tot in de eeuwigheid vooruit hadden moeten kunnen. Probleempje van 7 bits is dat computers dat geen rond getal vinden en dat er nauwelijks mooie word-lengtes van te maken zijn. Ander probleempje is dat buiten Amerika veel meer lettertekens nodig zijn. Alleen al in Europa hebben we behoefte aan allerlei streepjes, puntjes en krulletjes rond letters. Dus ontwikkelde IBM de codering EBCDIC, een 8 bits-code, voor haar mainframes, en kwam Unicode met een systeem waarin honderdduizenden tekens worden gecodeerd, zodat iedere taal er een plaats in kan vinden.
ASCII is voor microcomputers uiteindelijk belangrijker geworden dan EBCDIC, maar dan wel in een 8 bits-variant, waarbij individuele fabrikanten voor de 127 ASCII-tekens de standaard volgden en voor de rest hun eigen creativiteit los lieten. Vanaf die tijd werd wel langzaamaan vanzelfsprekend dat een byte = 8 bits en een word is twee of meer bytes.
En de naam, byte? Daar is weinig zekerheid over te vinden, maar het lijkt er op dat oorspronkelijk sprake was van een bite. En dat gaf verwarring met de bit, dus werd het byte.
Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.
Gerelateerd
En arrays dan?
Arnout van Kempen over rommelen in een digitale wereld.
Typecasting in COBOL
Arnout van Kempen over rommelen in een digitale wereld.
Gewone variabelen
Arnout van Kempen over rommelen in een digitale wereld.
Bestanden in soorten en maten
Arnout van Kempen over rommelen in een digitale wereld.
Alles draait om data
Arnout van Kempen over rommelen in een digitale wereld.