Boutisme

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 31 décembre 2004 à 11:41 et modifiée en dernier par 84.72.118.44 (discuter). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

Quand des entiers ou toute autre donnée sont représentés sur plusieurs octets, il y a plusieurs manières d'ordonner ces octets en mémoire ou dans une communication; cet ordre est déterminé par des conventions arbitraires.

Il en est de même dans l'écriture des langages humains : certains s'écrivent de gauche à droite, alors que d'autres s'écrivent de droite à gauche (sans parler de ceux qui s'écrivent à la verticale). Ces conventions en informatique portent les noms de big-endian et little-endian. On entend parler aussi de byte order ou byte sex. Il faut noter que cela ne concerne pas les séquences d'octets simples comme les chaînes de caractères codées en ASCII, et autres codes de même genre où un octet correspond à un caractère. Les chaînes codées en unicode, UTF-16 ou UTF-32, elles, sont concernées parce dans ce cas, c'est un ensemble de 2 ou 4 octets qui représente un caractère.

Dans les ordinateurs

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. 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.

Les architectures qui respectent cette règle sont appelées big-endian, par exemple les processeurs Motorola 68000, les SPARC ou encore System/370.

Les autres ordinateurs enregistrent 0xA0B70708 dans l'ordre suivant : 08 07 B7 A0, c'est-à-dire avec l'octet de poids le plus faible en premier. Les architectures qui respectent cette règle sont appelées little-endian, par exemple les Intel x86 (nos ordinateurs courants).

Certaines architectures supportent les deux règles, par exemple les PowerPC, les ARM, les DEC Alpha, les MIPS, les PA-RISC et IA64. On les appelle bytesexual ou bi-endian. Ce passage entre modes ce fait au niveau logiciel ou matériel.

Certaines autres architectures, appelées middle-endian, ont un ordonnancement plus complexe, par exemple 0xA0B70708 est enregistré ainsi : 07 08 A0 B7. Il est plus difficile de travailler avec des tels processeurs, les PDP par exemple.

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.

Dans les communications

On appelle cela le problème NUXI, en effet si on veut envoyer la chaine « 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é révélé en voulant porter la version UNIX d'un PDP-11 (little-endian) sur une architecture IBM (big-endian).

Le protocole IP définit un ordre à la manière big-endian pour les réseaux, où les informations binaires sont codées en paquets, et envoyées sur le réseau, l'octet de poids le plus fort en premier.

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

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 soucie pas de la convention.

Bien sur 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 la linguistique germanique, anglaise, ou autre, on n'a pas la même perception.

Ecriture 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 low-endian... relativement au sens d'écriture ordinaire de cette langue. (Il est amusant de constater que ces deux conventions opposées donnent le même résultat, du point de vue gauche-droite : les unités à droite...)