Endianness

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Endianness verwijst in het algemeen naar de manier van ordenen van een eendimensioneel systeem van elementen die zelf een geordende rij van sub-elementen zijn, zoals een computergeheugen. Er zijn twee hoofdsoorten: big-endian en little-endian. Sommige systemen hebben aspecten van beide, die noemt men middle-endian. Bij computers wordt endianness ook bytevolgorde genoemd.

Als voorbeeld kan gedacht worden aan de manier waarop we onze (decimale) getallen schrijven. Als eerste noteren we het belangrijkste cijfer en vervolgens steeds het minder belangrijke. Het belangrijkste einde, het "big end", komt eerst; deze manier wordt big-endian genoemd (zie de etymologie). Bij het uitspreken van de getallen 13 tot en met 99 maken we gebruik van little-endian, want we noemen het minst belangrijke deel eerst.

Endianness bij computers[bewerken]

Het probleem van endianness treedt onder andere op bij bestandsformaten, communicatieprotocollen en registers in computerapparatuur. Er zijn verschillende manieren om dit probleem op te lossen. De eenvoudigste is door simpelweg te kiezen voor een bepaalde endianness, en apparatuur die hiervan afwijkt, de conversie zelf laten doen. Het internet is bijvoorbeeld big-endian. Alle apparatuur dient hier te communiceren volgens deze afspraak, zelfs als beide kanten van een verbinding normaal gesproken little-endian zijn.

Bij het bewaren van een 32 bitswaarde, bijvoorbeeld 4A3B2C1D (hexadecimale notatie) op geheugenplaats 100, kunnen de verschillende bytes als volgt bewaard worden:

Big-endian[bewerken]

100 101 102 103
... 4A 3B 2C 1D ...

De meest significante byte 4A wordt hier dus eerst geplaatst. Dit noemt men big-endian (ezelsbruggetje: "big end first"). Dit wordt onder andere toegepast in Motorola 68000, SPARC en IBM mainframes.

Little-endian[bewerken]

100 101 102 103
... 1D 2C 3B 4A ...

Hier wordt de minst significante byte eerst gezet, en dit heet little-endian (ezelsbruggetje: "little end first"). Dit wordt toegepast in MOS Technology 6502, DEC VAX, en Intel x86.

Middle-endian[bewerken]

Middle-endian komt bijvoorbeeld voor bij computers met een woordbreedte van 16 bit waarvan de woorden op zich als big- of little-endian opgeslagen worden. Bij getallen die uit meer dan één woord bestaan worden de 16-bits woorden daarna weer in omgekeerde volgorde als de "woord-endian" opgeslagen.

100 101 102 103
... 3B 4A 1D 2C ...

of nog:

100 101 102 103
... 2C 1D 4A 3B ...

Dit wordt gebruikt bij PDP-11-processors.

Geen van de genoemde systemen heeft specifieke voordelen, maar Intel gebruikt in zijn x86-processors het little-endian-systeem, waardoor deze tegenwoordig veruit het meest toegepast wordt bij processoren. Bij de uitwisseling van gegevens tussen computers met verschillende endianness kunnen fouten ontstaan indien geen rekening wordt gehouden met dit verschil.

Etymologie[bewerken]

De termen big-endian en little-endian komen van de bevolkingsgroepen Big-Endians en Little-Endians uit de roman Gullivers reizen van Jonathan Swift. In het verhaal over Lilliput bestaat onenigheid tussen de twee bevolkingsgroepen over welk eind van een gekookt ei opengemaakt moet worden.

Geschiedenis[bewerken]

De keuze tussen big-endian en little-endian heeft geleid tot hoog oplopende discussies. Omdat het onderwerp eigenlijk futiel was, verwijzen de namen naar dit verhaal.

Een veelgehoord argument ten faveure van big-endian is dat het overeenkomt met de ordening in de menselijke taal. Dit is echter niet altijd het geval, in het bijzonder in het Nederlands. In het Nederlands spreekt men "24" uit als "vier-en-twintig", waarbij het minst significante getal eerst wordt uitgesproken. Bij honderdtallen en hoger is er sprake van "gemengde endianness", "124" spreken we uit als "honderd-vier-en-twintig". Het Sanskriet is volledig little-endian ("chaturvinsh" (24, letterlijk "vier-en-twintig") en chaturvinshatyadhikashatatam (124, letterlijk "vier-en-twintig-over-honderd")). In geschreven taal komen ook zowel big- als little-endian vormen voor.