¿Por qué ambos pequeños y grandes endian todavía están en uso hoy, después de ~ 40 años de informática binaria? ¿Hay algoritmos o formatos de almacenamiento que funcionan mejor con uno y mucho peor con el otro? ¿No sería mejor si todos cambiamos a uno y nos apegamos a él?Porque son las dos poco- y big-endian en uso?
Respuesta
Al agregar 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 Intel 8088, que tenía registros de 16 bits pero un bus de datos de 8 bits, ser little-endian permitía que tales instrucciones comenzaran a funcionar después del primer ciclo de memoria. (Por supuesto, debería ser posible que las búsquedas de memoria de una palabra se hagan en orden decreciente en vez de aumentar, pero sospecho que esto hubiera complicado un poco el diseño).
En la mayoría de los procesadores, el ancho del bus coincide con el ancho de registro así que esto ya no confiere una ventaja.
Los números de Big-Endian, por otro lado, se pueden comparar comenzando por el MSB (aunque muchas instrucciones de comparación realmente hacen un resta que necesita comenzar con el LSB de todos modos). El bit de signo también es muy fácil de conseguir.
algoritmos allí o almacenamiento formatos que funcionan 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: la importancia de un bit es 2^(bit_pos + 8 * byte_pos). Mientras que con la 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 apegamos a él?
Debido al predominio 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 ser más compatible con el mundo x86. Lo cual está bien para mí.
No olvides la red que funciona principalmente en BE – mathk
Whoa, nunca supe que los bits de cada byte también se almacenan menos significativos. ¿Entonces 10 = 0x0A está realmente almacenado como '01010000' y no como 00001010 binario? ¿Es esto cierto en los sistemas BE también? – krubo
@krubo La unidad direccionable más pequeña es el byte, por lo que en realidad es completamente arbitrario cómo se consideran los bits que se deben organizar. La forma en que los bits se "almacenan" dentro de un byte depende por completo de la convención que desee seguir. Si lleva su convención de elección en papel, de hecho escribiría el valor 10 como 01010000 en Little Endian y como 00001010 en Big Endian. –
Tanto el endian grande como el pequeño tienen sus ventajas y desventajas. Incluso si uno fuera claramente superior (que no es el caso), no hay manera de que cualquier arquitectura legado sería capaz de cambiar orden de bits, por lo que me temo que sólo vamos a tener que aprender a vivir con ella.
Little Endian hace typecasts más fácil. Por ejemplo, si tiene un número de 16 bits que 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 exacto de datos con el que está tratando (aunque en la mayoría de los casos sí lo sabe).
Big Endian es un poco más legible por humanos. Los bits se almacenan en la memoria, ya que aparecen en orden lógico (los valores más significativos primero), al igual que para cualquier sistema numérico utilizado por el ser humano.
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 una razón obvia para ninguno de los sistemas, entonces, ¿por qué cambiar algo si su antiguo sistema funciona perfectamente?
Realmente no sigo su comentario de tipo de letra. – Artelius
En un sistema little-endian, los bits menos significativos aparecen primero en la memoria. Por lo tanto, podría tratar este puntero de memoria como un valor de 8 bits (obtendrá los 8 bits menos significativos), el valor de 16 bits, etc. Siempre obtendrá el número correcto de bits en el orden esperado. En los sistemas de big endian obtendría los bits más significativos, que no es lo que espera al encasillar un tipo de datos más grande a uno más pequeño. –
Typecasting generalmente se hace en registros, de lo contrario no se puede firmar-extender y tal, a excepción de un reinterpreteo, en cuyo caso tiene razón, sin embargo, en algunas máquinas de endian grande, un puntero apunta a la último byte de una palabra, no el primero, lo que aumenta la confusión. – Artelius
- 1. ¿Cuáles son las ventajas de utilizar POCO en DataTables?
- 2. ¿Cuáles son las 'grandes' ventajas de tener Poco con ORM?
- 3. ¿Cuáles son las diferencias entre typedef y el uso?
- 4. ¿Cuáles son las diferencias de uso entre size_t y off_t?
- 5. ¿Por qué las interfaces de usuario de redes son tan técnicas y poco intuitivas?
- 6. ¿La comparación de cadenas == solo funciona porque las cadenas son inmutables?
- 7. ¿Cuán más eficaces son las texturas de potencia de dos?
- 8. ¿Son dos funciones iguales?
- 9. ¿Cuáles son algunas de las características más útiles aunque poco conocidas en el lenguaje PowerShell
- 10. ¿Las referencias y punteros son iguales con respecto al polimorfismo?
- 11. Fusionando dos marcos de datos en R que tienen muestras comunes y poco comunes
- 12. Agregar métodos a las clases POCO
- 13. ¿Las claves públicas y privadas son intercambiables?
- 14. ¿Cómo funcionan las cadenas cuando se copia poco a poco algo en C#?
- 15. ¿Cuáles son las diferencias entre las definiciones de parámetros como (tipo y nombre) y (tipo * nombre)?
- 16. Referencia dos ensamblados iguales, solo las claves públicas son diferentes
- 17. ¿Cuáles son algunas geniales pero poco conocidas bibliotecas para Lua?
- 18. ¿Cuándo dos enumeraciones son iguales en C#?
- 19. ¿Cuáles son las vulnerabilidades en el uso directo de GET y POST?
- 20. ¿Cuáles son las diferencias y los patrones de uso para los despachadores en Akka 2?
- 21. ¿Cuáles son las alternativas al uso de phpMyAdmin?
- 22. ¿Cuáles son las diferencias entre MVC, MVP y MVVM?
- 23. ¿Cuáles son las "consecuencias prácticas" del uso de referencias suaves?
- 24. ¿Cuáles son las implicaciones de portabilidad del uso del NDK?
- 25. ¿Cuáles son las diferencias entre ADOdb y PDO en PHP?
- 26. ¿Cuáles son las ventajas del uso de Node.js vs PHP
- 27. El método String Equals() falla aunque las dos cadenas son las mismas en C#?
- 28. ¿Qué son las fortunas?
- 29. C Modismos y hechos poco conocidos
- 30. ¿Qué son las cookies firmadas y por qué son útiles?
Usted acaba de robar las palabras de mi boca. :). Gracias – Soundararajan
Si no hubiéramos obtenido nuestros números de un idioma semítico, también seríamos pequeños endian. – hoodaticus