Existe-t-il une astuce pratique pour se souvenir de la différence entre le big-endian et le little-endian?

13

Je ne travaille pas tous les jours avec des problèmes big-endian et little-endian et donc j'ai du mal à me rappeler lequel est quoi.

Récemment, j'ai eu une interview demandant la différence entre les deux; puisque je ne me souvenais pas, j'ai décidé de "deviner" (50% de chance, après tout) mais j'ai échoué.

Alors, existe-t-il une astuce pratique largement connue pour se rappeler quelle est la différence entre le gros endian et le petit endian?

Emiliano
la source
10
Je pense que vous feriez mieux de dire ce qu'est l'endianisme et de dire que vous ne vous souvenez jamais de quel sens il s'agit, alors vous devez toujours le chercher sur Google
jk.
J'ai moi aussi des problèmes pour m'en souvenir et il y a trop de trucs mnémotechniques déroutants. Ma seule aide fiable est de lancer le sort endianness sur google pour que j'obtienne l'article Wikipedia .
mouviciel
3
Coïncidence drôle - je ne suis tombé que sur ce lien aujourd'hui, et c'est étonnamment pertinent commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
Nevermind
@Nevermind J'ai arrêté de lire cet article après le deuxième paragraphe. "N'intéresse que les rédacteurs de compilateurs et les personnes qui doivent gérer la mémoire mappée aux registres"? Outre le fait qu'il s'agit d'une horrible phrase de chemin de jardin , cela implique que le code qui traite des registres est un cas de bord. Essayez d'utiliser un ordinateur sans pilotes de périphérique.
dodgethesteamroller

Réponses:

14

J'ai toujours pensé que c'était défini dans le mauvais sens, et c'est aussi l'astuce pour s'en souvenir. En tant que locuteur anglophone non natif, je vois "end" comme l'opposé de "start" (bien qu'évidemment "end" puisse signifier l'une ou l'autre des extrémités - la fin du début ou la fin). Quoi qu'il en soit, je me souviens juste que "c'est défini dans le mauvais sens" :)

  • En big endian , l'octet le plus significatif (le plus grand) est au début .
  • En petit endian , l'octet le moins significatif (le plus petit) est au début .

Ou, en référence à l' endianité des bits :

  • 128 64 32 16 8 4 2 1 est big endian, car il se termine par le petit.
  • 1 2 4 8 16 32 64 128 est peu endian, car il se termine par le grand.

Même si l'utilisation habituelle du mot endianness se réfère à la façon dont les octets sont ordonnés dans un mot, sa signification générique fait référence à l'ordre des sous-composants adressables individuellement dans la représentation d'un élément de données plus grand ( comme expliqué dans Wikipedia ).

Joonas Pulakka
la source
5
ahh, mais les lilliputiens de Little Endian ont commencé (cassé) leurs œufs à la petite extrémité, donc c'est le bon chemin
jk.
4
-1: L'endianisme fait référence aux octets d'un mot et non aux bits d'un octet.
kdgregory
1
@kdgregory - En fin de compte, la numérotation des bits est affectée dans un mot. Avez-vous essayé des structures de champs binaires à travers différents endians? Je suis d'accord pour dire que la réponse est fausse, cependant.
mouviciel
@Kdgregory: selon Wikipedia , l' endianisme fait référence à l'ordre des sous-composants adressables individuellement dans la représentation d'un élément de données plus grand. C'est le cas générique. Il y a aussi une notion d' endianisme des bits . Vous avez raison, dans la mesure où l' utilisation la plus courante de l'endianisme fait référence à la façon dont les octets sont ordonnés dans un mot, et mes exemples ne l'ont certainement pas reflété. Remplacé le premier exemple par le cas commun.
Joonas Pulakka
2
@kdgregory: Depuis quand l'existence d'un matériel est-elle requise pour justifier les notions théoriques CS? Mais très bien: 8051 a des registres adressables par bit. Le langage Ada permet de spécifier l'ordre de bits approprié pour la représentation du type de données ( pdf ). L'ordre de transmission des bits sur un support série doit bien sûr définir l'endianité des bits. Le fait que l' utilisation habituelle de "l'endianité" se réfère à un cas spécial (octets en mots) n'invalide pas sa signification générique.
Joonas Pulakka
33

Mon conseil:

  • big endian = big-end en premier! (le premier octet (adresse la plus basse) est le MSB)
  • petit endian = petit bout d'abord! (le premier octet (adresse la plus basse) est le LSB)
KB99
la source
3
Oui, c'est ainsi que je pense: Big Endian "Commence à la GRANDE extrémité", tandis que Little Endian "Commence à la Petite extrémité". C'est comme une batte de baseball, il y a deux extrémités de la batte, l'une est grande, l'autre est petite. Ce n'est vraiment pas si difficile d'un concept.
Shane Kilkelly
6

La meilleure façon de s'en souvenir est que les peuples civilisés recherchent la variété et donc mangent leurs œufs différemment de leur commande. Alors que nous écrivons des chiffres décimaux en commençant par les gros chiffres en premier (gros endian), nous mangeons des œufs à la coque de la petite extrémité (little endian).

Andrey Fedorov
la source
1
Cette réponse est surtout non technique, mais elle était complètement exacte et m'a fait rire. Bon travail.
6

Les nombres big-endiens commencent au "big end". Les nombres Little-endian commencent au "petit bout".

Les deux sont une allusion à la question de savoir où commencer à manger votre œuf, selon les voyages de Gulliver.

Dans ce cas, "fin" n'est pas l'opposé de début, cela signifie simplement n'importe quel extrême d'une (corde | chaîne | nombre | séquence), donc ils ne sont pas appelés "grand finlandais" ou "petit finlandais" (ce qui serait certainement l'opposé de "start").

Vatine
la source
En effet. Et la façon la plus simple (et la plus amusante) de se souvenir est d'aller lire les Voyages de Gulliver. Je vous garantis que vous n'oublierez jamais lequel est lequel!
Jules
Vous devriez mettre "commencer à manger" en gras (également 72 points, <blink>), c'est vraiment la raison de toute la confusion ici.
T Nierath du
2

La façon la plus simple dont je me souvienne est de changer le mot «endian» en «startian». Les grands entiers startian commencent par la grande extrémité (par exemple les octets les plus significatifs viennent en premier), et les petits entiers startian commencent par la petite fin (par exemple les octets les moins significatifs viennent en premier).

dreamlax
la source
N'hésitez pas à prononcer startian comme /'stɑːr.ʃən/ ou /'stɑːr.ti.ən/ (omettez le / r / pour les accents non rhotiques)
dreamlax
C'est assez intelligent et facile à retenir.
Coldblackice
1

Je n'ai jamais pu me souvenir qui est "big-endian" et qui est "little-endian" mais connaissais l'endianness des processeurs PowerPC et Intel x86. Little a la plupart des lettres en commun avec Intel, donc Intel x86 est peu endian.

Bien sûr, cela n'est utile que si vous connaissez l'ordre des octets de PPC et x86. D'un autre côté, vous devez maintenant vous rappeler qu'Intel x86 = little-endian. Et rappelez-vous que x86 et ARM sont très, très compatibles même avec des jeux d'instructions totalement différents.

gnasher729
la source
1

Je le dirais ainsi: Big is beautiful!

Grand == beau == à droite.
L'endianisme droit est celui que vous pouvez lire dans un vidage hexadécimal, qui est celui qui place l'octet le plus significatif en premier, comme tout humain sain d'esprit.

Peu == laid == faux.
Les hexdumps produits par cette endianess sont tellement faux que vous vous enfuyez en criant "Brains!". C'est peut-être une sorte d'abomination extraterrestre, nous ne pouvons que spéculer sur l'origine de cette atrocité. Néanmoins, il existe, et nous sommes coincés avec lui.

Pitty, ce n'est pas toujours la meilleure variante qui fait la course ...

cmaster - réintégrer monica
la source
Little == ugly == wrong... "Même la plus petite personne peut changer le cours de l'avenir" -Galadrial, LOTR
Coldblackice
-1

En big endian: (ordre croissant)

Faible à élevé ie

0 | 1 | 2 | 3 ^ ^ Début Fin

En petit-endien: (ordre décroissant)

Haut en bas

c'est à dire

3 | 2 | 1 | 0 ^ ^ Début Fin

user222896
la source
1
La question demandait une astuce pratique pour se rappeler laquelle.
gnasher729