Little endian

Little endian

Endianness

En informatique, certaines données telles que les nombres entiers peuvent être représentées sur plusieurs octets. L'ordre dans lequel ces octets sont organisés en mémoire ou dans une communication est appelé endianness (mot anglais traduit par « boutisme »[1]).

De la même manière que certains langages humains s'écrivent de gauche à droite, et d'autres s'écrivent de droite à gauche[2], il existe une alternative majeure à l'organisation des octets représentant une donnée : l'orientation big-endian et l'orientation little-endian. Ces expressions sont parfois traduites par gros-boutiste et petit-boutiste[3]. Les expressions byte order, d’ordre des octets ou de byte sex sont également utilisées (bien que faisant référence à des unités d’une base numérale précise sur 8 bits, que le terme endianness plus général ne traduit pas).

L'endianness qualifie aussi bien un fichier (dans lequel ce sont les octets qui sont ordonnés différemment) qu'un processeur (dans lequel la gestion des bits a aussi un ordre).

Sommaire

Étymologie

Les termes big-endian et little-endian ont été empruntés aux Voyages de Gulliver de Jonathan Swift, roman dans lequel deux clans de Lilliputiens se font la guerre à cause de la manière différente qu'ils ont de casser les œufs à la coque : par le gros ou le petit bout. La traduction française donne en général les termes gros-boutien et petits-boutien ; toutefois, en informatique, le suffixe -iste est employé de préférence à -ien.

Dans les ordinateurs

Big endian

Quand certains ordinateurs enregistrent un entier sur 32 bits en mémoire, par exemple 0xA0B70708 en notation hexadécimale, ils l'enregistrent dans des octets dans l'ordre qui suit : A0 B7 07 08, pour une structure de mémoire basée sur une unité atomique de 1 octet et un incrément d'adresse de 1 octet. Ainsi, l'octet de poids le plus fort (ici A0) est enregistré à l'adresse mémoire la plus petite, l'octet de poids inférieur (ici B7) est enregistré à l'adresse mémoire suivante et ainsi de suite.

0 1 2 3
... A0 B7 07 08 ...

Pour une structure de mémoire ou un protocole de communication basé sur une unité atomique de 2 octets, avec un incrément d'adresse de 1 octet, l'enregistrement dans des octets sera : A0B7 0708. L'unité atomique de poids le plus fort (ici A0B7) est enregistré à l'adresse mémoire la plus petite.

0 1 2 3
... A0 B7 07 08 ...

Les architectures qui respectent cette règle sont dites big-endian ou gros-boutistes ou mot de poids fort en tête, par exemple les processeurs Motorola 68000, les SPARC (Sun Microsystems) ou encore les System/370 (IBM).

Little endian

Les autres ordinateurs enregistrent 0xA0B70708 dans l'ordre suivant : 08 07 B7 A0 (pour une structure de mémoire basée sur une unité atomique de 1 octet et d'un incrément d'adresse de 1 octet), c'est-à-dire avec l'octet de poids le plus faible en premier. De telles architectures sont dites little-endian ou petit-boutistes ou mot de poids faible en tête. Par exemple, les processeurs x86, qui se trouvent dans les PC ont une architecture petit-boutiste.

0 1 2 3
... 08 07 B7 A0 ...

Pour une structure de mémoire ou un protocole de communication basé sur une unité atomique de 2 octets, avec un incrément d'adresse de 1 octet, l'enregistrent dans des octets sera : 0708 A0B7. L'unité atomique de poids le plus faible (ici 0708) est enregistré à l'adresse mémoire la plus petite.

0 1 2 3
... 07 08 A0 B7 ...

Bi-endian

Certaines architectures supportent les deux règles, par exemple les architectures PowerPC (IBM), ARM, DEC Alpha, MIPS, PA-RISC (HP) et IA-64 (Intel). On les appelle bytesexual(jargon), bi-endian ou, plus rarement, biboutistes. Le choix du mode peut se faire au niveau logiciel, au niveau matériel ou aux deux.

Middle-endian

Certaines autres rares architectures, appelées middle-endian, ont un ordonnancement plus complexe: les octets composant les unités atomiques subissent une opération de swap. Par exemple 0xA0B70708 est enregistré dans une mémoire, middle-endian dont les unités atomiques sont de 2 octets, avec un incrément d'adresse de 1 octet, dans l'ordre : 0807 B7A0 ou bien B7A0 0807.

0 1 2 3
... 08 07 B7 A0 ... middle-endian, unité atomique 2-octets, incrément d'adresse 1-octet

ou alternativement

0 1 2 3
... B7 A0 08 07 ... middle-endian, unité atomique 2-octets, incrément d'adresse 1-octet

Il existe une ambiguïté dans la représentation de cette donnée. En effet l'information d'endianness sur la manière d'ordonner les unités atomiques existe toujours bel et bien. Au terme de middle-endian, on utilise donc plutôt les termes de big-endian ou little-endian associé à une caractéristique de byte-swap. L'exemple devient dès lors non ambigu :

1. dans une mémoire little-endian avec byte-swap, 2 octets d'unité atomique, 1-octet d'incrément d'adresse, 0xA0B70708 est représenté par 0807B7A0, 08 étant à l'adresse 0.

0 1 2 3
... 08 07 B7 A0 ... little-endian, byte-swap, unité atomique 2 octets, incrément d'adresse 1 octet

2. dans une mémoire big-endian avec byte-swap, 2 octets d'unité atomique, 1 octet d'incrément d'adresse, 0xA0B70708 est représenté par B7A00807, B7 étant à l'adresse 0.

0 1 2 3
... B7 A0 08 07 ... big-endian, byte-swap, unité atomique 2 octets, incrément d'adresse 1 octet

Il est plus difficile de travailler avec de tels processeurs, les PDP-11 par exemple.

Ordre des bits

La numérotation des bits dans une architecture big-endian est ainsi : les bits sont numérotés de la gauche, donc le bit 0 a le poids le plus fort, et le bit 7 étant celui de poids le plus faible dans un octet. Il semble plus intuitif de numéroter les bits à la manière little-endian si un octet doit représenter un entier, car dans ce cas, le numéro du bit correspond à l'exposant. Cependant, si l'octet doit représenter une fraction binaire, alors la convention big-endian convient mieux.

Un moyen mnémotechnique pour ne pas confondre les deux notations consiste à remplacer « endian » par « head ». On a alors :

  • « big head » pour les bits de poids « fort en tête »,
  • « little head » pour les bits de poids « faible en tête ».

Dans les communications

On appelle cela le problème NUXI, en effet si on veut envoyer la chaîne « UNIX » en regroupant deux octets par mot entier de 16 bits sur une machine de convention différente, alors on obtient NUXI. Ce problème a été découvert en voulant porter une des premières versions d'Unix d'un PDP-11 middle-endian sur une architecture IBM big-endian.

Le protocole IP définit un standard, le network byte order (soit ordre des octets du réseau). Dans ce protocole, les informations binaires sont en général codées en paquets, et envoyées sur le réseau, l'octet de poids le plus fort en premier, c'est-à-dire selon le mode big-endian et cela quel que soit l'endianness naturel du processeur hôte.

Les périphériques doivent aussi respecter une convention afin d'assurer la cohérence du système. Tout cela est fixé par le protocole de la couche de liaison du modèle OSI.

Différences pratiques

Bien que la différence entre les deux modes big-endian et little-endian semble aujourd'hui minime et se limite à un problème de convention, on peut signaler des avantages liés à chacun :

Les nombres big-endian sont plus faciles à lire lorsqu'on débogue un programme car leur contenu est directement lisible sans avoir à changer l'ordre des octets constituant le nombre. Cela est dû au fait que l'ordre des chiffres est le même que celui de l'écriture normale.

Le mode little-endian présentait des avantages lorsque les processeurs utilisaient des tailles de registre variables, c’est-à-dire 8, 16 ou 32 bits. À partir d'une adresse mémoire donnée, on pouvait lire le même nombre en lisant 8, 16 ou 32 bits.

Par exemple, le nombre 33 (0x21 en hexadécimal) s'écrit 21 00 00 00 en little endian en 32 bits, ce qui se lit toujours 21 quel que soit le nombre d'octets lus. Ceci est faux en big-endian car la première adresse change suivant le nombre d'octets à lire.

Logiciels et portabilité

On a bien compris que ces conventions posent des problèmes dans le portage des logiciels. Par exemple, en lisant des données binaires, selon l'architecture, on ne va pas obtenir la même donnée après lecture si on ne se soucie pas de la convention.

Bien sûr le choix de big-endian ou little-endian est toujours arbitraire, ce qui soulève des débats intensifs, car il y a nombre d'arguments en faveur de l'un et de l'autre. Les langues par exemple, selon le groupe linguistique germanique, anglais ou autre, n'ont pas la même perception.

Écriture des nombres dans les langues humaines

Le problème du choix du sens d'écriture se pose aussi pour l'écriture des nombres en notation positionnelle dans les langues humaines.

Dans les langues utilisant l'alphabet latin, qui se lisent de gauche à droite, les nombres s'écrivent en commençant par les chiffres de poids le plus forts. C'est donc une convention big-endian. En arabe, c'est l'inverse : on écrit — cette fois de droite à gauche — d'abord les unités, puis les dizaines, etc. C'est une convention little-endian... relativement au sens d'écriture ordinaire de cette langue. Ces deux conventions opposées donnent le même résultat, du point de vue gauche-droite : les unités à droite.

Écriture des dates

Certains pays ont des standards concernant l'écriture des dates. La notion d'endianness y est présente comme le montrent les exemples suivants :

  • Europe : JJ/MM/AAAA (little endian)
  • Japon : AAAA/MM/JJ (big endian)
  • États-Unis : MM/JJ/AAAA (middle endian)

Voir aussi

Notes et références

  1. Le terme boutisme est encore peu utilisé, bien que la référence étymologique est établie et les traductions de Gulliver connues en français depuis le XVIIIe siècle, et la dérivation du mot « bout » est aussi très utilisée dans les termes « jusqu’au-boutisme » et « jusqu’au-boutiste », par extension naturelle du mot français « bout » ; de plus le mot français « bout » admet ces extensions par préfixe et/ou suffixe comme dans les termes « rabouter », « rebouteux », « bouton », etc.
  2. Les langages qui s'écrivent de haut en bas ne représentent pas une catégorie différente, du point de vue logique. L'organisation des données par rapport à la page qui les contient est identique, à une rotation près. (C’est-à-dire que les données de poids forts par rapport à l'orientation de la page sont toujours dans l'une ou l'autre de ces catégories)
  3. Des étymologistes ont proposé à ceux qui s’opposent à l’emploi d’un double adjectif dans un mot composé formant un autre adjectif, d’utiliser les termes maxiboutiste et miniboutiste au lieu de petit-boutiste et gros-boutiste, à l’aide des préfixes latins usuels de façon similaire aux termes maximaliste et minimaliste. D’autres encore proposent et défendent le suffixe « -ien » au lieu de « -iste », mais ne proposent pas de solution pour le suffixe associé à « boutisme » dont l’usage est déjà attesté dans des mots composés et les termes synonymes petit-boutien et gros-boutien sont donc encore moins utilisés. Le débat n’est pas encore tranché, la guerre entre les boutistes et les boutiens, sur les forums et listes de discussions Internet, n’étant pas moins féroce qu’à Lilliput, et les partisans de chaque camp prenant référence de chaque côté à une traduction française publiée ou une autre des mêmes Voyages de Gulliver !

Articles connexes

Liens externes

  • Portail de l’informatique Portail de l’informatique

Ce document provient de « Endianness ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Little endian de Wikipédia en français (auteurs)

Игры ⚽ Нужен реферат?

Regardez d'autres dictionnaires:

  • Little-Endian — Little Endian,   Datenformat, bei dem eine Zahl mit umgekehrter Bytereihenfolge abgelegt wird. Zum Beispiel wird die Hexadezimalzahl 2BA0 als A02B abgespeichert. Das Datenformat Big Endian speichert eine Zahl in der normalen Reihenfolge, also… …   Universal-Lexikon

  • Little-Endian — Die Byte Reihenfolge (engl.: Byte Order oder Endianness) bezeichnet die Speicherorganisation für einfache Zahlenwerte, in erster Linie die Ablage von ganzzahligen Werten (Integer) im Arbeitsspeicher. Eine Festlegung des zu verwendenden… …   Deutsch Wikipedia

  • Little-endian — Die Byte Reihenfolge (engl.: Byte Order oder Endianness) bezeichnet die Speicherorganisation für einfache Zahlenwerte, in erster Linie die Ablage von ganzzahligen Werten (Integer) im Arbeitsspeicher. Eine Festlegung des zu verwendenden… …   Deutsch Wikipedia

  • Little Endian — Die Byte Reihenfolge (engl.: Byte Order oder Endianness) bezeichnet die Speicherorganisation für einfache Zahlenwerte, in erster Linie die Ablage von ganzzahligen Werten (Integer) im Arbeitsspeicher. Eine Festlegung des zu verwendenden… …   Deutsch Wikipedia

  • Little endian — Die Byte Reihenfolge (engl.: Byte Order oder Endianness) bezeichnet die Speicherorganisation für einfache Zahlenwerte, in erster Linie die Ablage von ganzzahligen Werten (Integer) im Arbeitsspeicher. Eine Festlegung des zu verwendenden… …   Deutsch Wikipedia

  • Little-endian — Endianness En informatique, certaines données telles que les nombres entiers peuvent être représentées sur plusieurs octets. L ordre dans lequel ces octets sont organisés en mémoire ou dans une communication est appelé endianness (mot anglais… …   Wikipédia en Français

  • little endian —    A computer architecture in which the least significant byte has the lowest address and so is stored little end first. Many processors, including those from Intel, the PDP 11, and the VAX family of computers, are all little endian. The term… …   Dictionary of networking

  • little endian — didėjantys baitai statusas T sritis informatika apibrėžtis Unikodu koduoto ženklo baitų išdėstymo būdas, kai pirmiau eina vienetų baitas, po jo – šešioliktukų (šešioliktainės skaičiavimo sistemos) baitas. Žymimas ↑baitų eiliškumo ženklu, rašomu… …   Enciklopedinis kompiuterijos žodynas

  • Little-endian (disambiguation) — Little endian may refer to:* A philosophical viewpoint held by inhabitants of the island of Lilliput from the book Gulliver s Travels by Jonathan Swift. * Endianness, the byte ordering in memory used to represent some kind of data in computing …   Wikipedia

  • little-endian — adjective Of a computer, storing the most significant byte of a multibyte number at a higher address than the least significant byte; that is, little end first. Ant: big endian See Also: endianness …   Wiktionary

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”