¿Hay algún truco práctico para recordar la diferencia entre big-endian y little-endian?

13

No trabajo todos los días con problemas big-endian y little-endian y, por lo tanto, me resulta muy difícil recordar cuál es qué.

Recientemente recibí una entrevista preguntando la diferencia entre los dos; Como no recordaba, decidí "adivinar" (50% de posibilidades, después de todo) pero fallé.

Entonces, ¿hay algún truco práctico ampliamente conocido para recordar cuál es la diferencia entre big endian y little endian?

Emiliano
fuente
10
Creo que es mejor decir lo que es la resistencia y decir que nunca puedes recordar en qué dirección está, así que siempre lo buscas en Google
jk.
Yo también tengo problemas para recordarlo y hay demasiados trucos mnemotécnicos confusos. Mi única ayuda confiable es lanzar el hechizo de endianness en google para que obtenga el artículo de Wikipedia .
mouviciel
3
Divertida coincidencia - que sólo tropezó en este enlace hoy en día, y es sorprendentemente relevante commandcenter.blogspot.com/2012/04/byte-order-fallacy.html
No importa
@Nevermind Dejé de leer ese artículo después del segundo párrafo. ¿"De interés solo para los escritores compiladores y las personas que tienen que lidiar con la memoria asignada a los registros"? Además del hecho de que es una oración horrible de camino al jardín , implica que el código que trata con registros es un caso extremo. Intente usar una computadora en algún momento sin controladores de dispositivo.
dodgethesteamroller

Respuestas:

14

Siempre he pensado que se define de manera incorrecta, y ese es también el consejo para recordarlo. Como hablante no nativo de inglés, veo "fin" como lo opuesto a "inicio" (aunque obviamente "fin" puede significar ya sea fin, el principio final o el final). De todos modos, solo recuerdo que "está definido de manera incorrecta" :)

  • En big endian , el byte más importante (más grande) está en el comienzo .
  • En little endian , el byte menos significativo (más pequeño) está en el comienzo .

O, refiriéndose al poco endianness :

  • 128 64 32 16 8 4 2 1 es big endian, porque termina en lo pequeño.
  • 1 2 4 8 16 32 64 128 es little endian, porque termina en grande.

Aunque el uso habitual de la palabra endianness se refiere a cómo se ordenan los bytes dentro de una palabra, su significado genérico se refiere al orden de los subcomponentes direccionables individualmente dentro de la representación de un elemento de datos más grande ( como se explica en Wikipedia ).

Joonas Pulakka
fuente
55
ahh, pero los liliputienses endianianos comenzaron (rompieron) sus huevos en el pequeño extremo, así que es el camino correcto
jk.
44
-1: Endian-ness se refiere a bytes dentro de una palabra, no bits dentro de un byte.
kdgregory
1
@kdgregory: al final, la numeración de bits se ve afectada dentro de una palabra. ¿Has probado estructuras de campo de bits en diferentes endians? Sin embargo, estoy de acuerdo en que la respuesta es incorrecta.
mouviciel
@Kdgregory: según Wikipedia , endianness se refiere al orden de subcomponentes direccionables individualmente dentro de la representación de un elemento de datos más grande. Ese es el caso genérico. También hay una noción de poco endianness . Tienes razón en que el uso más común de endianness se refiere a cómo se ordenan los bytes dentro de una palabra, y mis ejemplos ciertamente no reflejan eso. Reemplazó el primer ejemplo con el caso común.
Joonas Pulakka
2
@kdgregory: ¿Desde cuándo se requiere la existencia de hardware para justificar las nociones teóricas de CS? Pero muy bien: 8051 tiene registros direccionables por bits. El lenguaje Ada permite especificar el orden de bits apropiado para la representación del tipo de datos ( pdf ). El orden de transmisión de bits a través de un medio en serie, por supuesto, debe definir la resistencia de bits. El hecho de que el uso habitual de "endianness" se refiera a un caso especial (bytes en palabras) no invalida su significado genérico.
Joonas Pulakka
33

Mi propio consejo:

  • big endian = big-end primero! (el primer byte (dirección más baja) es el MSB)
  • little endian = little-end primero! (el primer byte (dirección más baja) es el LSB)
KB99
fuente
3
Sí, así es como lo pienso: Big Endian "comienza en el extremo GRANDE", mientras que Little Endian "comienza en el extremo pequeño". Es como un bate de béisbol, hay dos extremos del bate, uno es grande, el otro es pequeño. Realmente no es un concepto tan difícil.
Shane Kilkelly
6

La mejor manera de recordar esto es que los pueblos civilizados buscan variedad y, por lo tanto, comen sus huevos de manera diferente de lo que ordenan sus números. Mientras que escribimos dígitos decimales comenzando en los dígitos grandes primero (big endian), comemos huevos pasados ​​por agua del pequeño final (little endian).

Andrey Fedorov
fuente
1
Esta respuesta es principalmente no técnica, pero fue completamente precisa y me hizo reír. Buen trabajo.
6

Los números big-endianos comienzan en el "gran final". Los números little-endian comienzan en el "pequeño final".

Ambos son una alusión al tema de dónde comenzar a comer su huevo, según los viajes de Gulliver.

En este caso, "fin" no es lo opuesto a inicio, solo significa cualquier extremo de una (cuerda | cuerda | número | secuencia), por lo que no se les llama "gran acabado" o "pequeño acabado" (que definitivamente sería lo contrario de "inicio").

Vatine
fuente
En efecto. Y la forma más fácil (y más divertida) de recordar es ir a leer los viajes de Gulliver. ¡Te garantizo que nunca olvidarás cuál es cuál otra vez!
Jules
Debería poner "empezar a comer" en negrita (también 72pt, <blink>), esa es realmente la razón de toda la confusión aquí.
T Nierath
2

La forma más fácil de recordar es cambiar la palabra "endian" en "startian". Los enteros startian grandes comienzan con el extremo grande (por ejemplo, los bytes más significativos son lo primero), y los enteros startian pequeños comienzan con el extremo pequeño (por ejemplo, los bytes menos significativos son lo primero).

dreamlax
fuente
Siéntase libre de pronunciar startian como /'stɑːr.ʃən/ o /'stɑːr.ti.ən/ (omita el / r / para acentos no róticos)
dreamlax
Esto es bastante inteligente y fácil de recordar.
Coldblackice
1

Nunca pude recordar cuál es "big-endian" y cuál es "little-endian", pero conocía la endianness de los procesadores PowerPC e Intel x86. Little tiene la mayoría de las letras en común con Intel, por lo que Intel x86 es little endian.

Por supuesto, eso solo es útil si conoce el orden de bytes de PPC y x86. Por otro lado, ahora debe recordar que Intel x86 = little-endian. Y recuerde que x86 y ARM son muy, muy compatibles incluso con conjuntos de instrucciones totalmente diferentes.

gnasher729
fuente
1

Lo diría de esta manera: ¡Grande es hermoso!

Grande == hermosa == derecha.
El endianess correcto es el que puedes leer en un hexdump, que es el que pone primero el byte más significativo, como lo hace cualquier humano sano.

Poco == feo == mal.
Los hexdumps producidos por esta resistencia son tan incorrectos que huyes gritando "¡Cerebros!". Tal vez esto sea algún tipo de abominación alienígena, solo podemos especular sobre el origen de esta atrocidad. Sin embargo, existe, y estamos atrapados en él.

Pitty, no siempre es la mejor variante que hace que la carrera ...

cmaster - restablecer monica
fuente
Little == ugly == wrong... "Incluso la persona más pequeña puede cambiar el curso del futuro" -Galadrial, LOTR
Coldblackice
-1

En big endian: (orden ascendente)

Bajo a alto, es decir

0 | 1 | 2 | 3 ^ ^ Inicio Fin

En little-Endian: (orden descendente)

De alto a bajo

es decir

3 | 2 | 1 | 0 ^ ^ Inicio Fin

usuario222896
fuente
1
La pregunta pedía un truco práctico para recordar cuál.
gnasher729