msc degree computer-science endianness

computer science - degree - ¿Por qué se usan tanto el big endian como el big-bigian?



master degree abbreviation (3)

¿Por qué se sigue usando tanto el big endian como el big y big endian después de unos 40 años de informática en binario? ¿Hay algoritmos o formatos de almacenamiento que funcionen mejor con uno y mucho peor con el otro? ¿No sería mejor si todos cambiamos a uno y nos quedamos con él?


Cuando agrega dos números (en papel o en una máquina), comienza con los dígitos menos significativos y trabaja hacia los dígitos más significativos. (Lo mismo ocurre con muchas otras operaciones).

En el Intel 8088, que tenía registros de 16 bits pero un bus de datos de 8 bits, siendo little-endian permitió que dichas instrucciones comenzaran a funcionar después del primer ciclo de memoria. (Por supuesto, debería ser posible que las recuperaciones de memoria de una palabra se realicen en orden decreciente en lugar de aumentar, pero sospecho que esto habría complicado un poco el diseño).

En la mayoría de los procesadores, el ancho del bus coincide con el ancho del registro, por lo que ya no confiere una ventaja.

Por otro lado, los números de Big Endian pueden compararse comenzando con el MSB (aunque muchas instrucciones de comparación realmente hacen una resta que debe comenzar con el LSB). El bit de signo también es muy fácil de conseguir.

¿Hay algoritmos o formatos de almacenamiento que funcionen mejor con uno y mucho peor con el otro?

No. Hay pequeñas ventajas aquí y allá, pero nada importante.

De hecho, creo que litte-endian es más natural y consistente: el significado de un bit es 2 ^ (bit_pos + 8 * byte_pos). Mientras que con big endian el significado de un bit es 2 ^ (bit_pos + 8 * (word_size - byte_pos - 1)).

¿No sería mejor si todos cambiamos a uno y nos quedamos con él?

Debido al dominio de x86, definitivamente hemos gravitado hacia little-endian. Los chips ARM en muchos dispositivos móviles tienen endianness configurable, pero a menudo se establecen en LE para que sean más compatibles con el mundo x86. Lo cual está bien para mí.


Little Endian hace que las tipificaciones sean más fáciles. Por ejemplo, si tiene un número de 16 bits, simplemente puede tratar la misma dirección de memoria como un puntero a un número de 8 bits, ya que contiene los 8 bits más bajos. Por lo tanto, no necesita saber el tipo de datos exacto con el que está tratando (aunque en la mayoría de los casos lo sabe de todos modos).

Big Endian es un poco más legible para los humanos. Los bits se almacenan en la memoria tal como aparecen en orden lógico (los valores más significativos primero), como en cualquier sistema numérico utilizado por humanos.

Sin embargo, en tiempos de muchas, muchas capas de abstracción, estos argumentos ya no cuentan. Creo que la razón principal por la que todavía tenemos ambos es que nadie quiere cambiar. No hay ninguna razón obvia para ninguno de los dos sistemas, ¿por qué cambiar algo si su sistema anterior funciona perfectamente bien?


Tanto el endian grande como el pequeño tienen sus ventajas y desventajas. Incluso si uno fuera claramente superior (lo que no es el caso), no hay forma de que alguna arquitectura heredada pueda cambiar la endianidad, así que me temo que solo tendrá que aprender a vivir con eso.