Endianness

Uit Wikipedia, de vrije encyclopedie
(Doorverwezen vanaf Big Endian)

Onder endianness of bytevolgorde verstaat men in de informatica de manier waarop woorden, die zelf uit meerdere bytes bestaan, in het computergeheugen worden opgeslagen. Het gaat daarbij om de volgorde in het geheugen van de bytes die samen een woord vormen. Wordt de meest significante byte het eerst geschreven, dan spreekt men van big-endian; schrijft men juist de minst significante byte eerst, dan van little-endian. Sommige systemen hebben aspecten van beide, die noemt men middle-endian.

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

Endianness bij computers[bewerken | brontekst 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 | brontekst 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 | brontekst bewerken]

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

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

Middle-endian[bewerken | brontekst 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 | brontekst 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 breekt een burgeroorlog uit tussen de twee bevolkingsgroepen over welk uiteinde van een gekookt ei opengemaakt moet worden.

Geschiedenis[bewerken | brontekst 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.