![Cálculo del bit menos significativo en little endian y big endian](https://rvso.com/image/1395311/C%C3%A1lculo%20del%20bit%20menos%20significativo%20en%20little%20endian%20y%20big%20endian.png)
Por lo que he investigado, Little Endian almacena el byte menos significativo en la dirección de memoria más pequeña, mientras que Big Endian almacena el byte más significativo en la dirección de memoria más pequeña.
Sin embargo, no entiendo cómo calcular y comparar los bytes significativos.
Por ejemplo, de estesitio, la siguiente imagen muestra cómo los CD de 4 bytes, 90, AB, 12, se almacenan en direcciones de memoria en formato Little Endian.
¿Cómo comparo qué byte es mayor entre los 4? Primero convertí todo a valores hexadecimales y luego comparé según sus valores decimales, pero no parece funcionar de esta manera.
205 > 18, sin embargo, el CD se almacena en la dirección de memoria más pequeña... así que... estoy equivocado.
Se agradece cualquier aclaración.
Treating CD as a hex value, with a decimal value of 205.
Treating 12 as a hex value, with a decimal value of 18.
Treating AB as a hex value, with a decimal value of 171.
Treating 90 as a hex value, with a decimal value of 144.
Respuesta1
¡Creo que la página web a la que enlaza contiene una descripción muy confusa de endianidad!
El valor real de los bytes individuales en la palabra no tiene relevancia en cuanto a dónde se almacenan en la memoria, solo su posición como parte de la palabra completa de 4 bytes.
La endianidad solo se aplica a palabras de varios bytes. En su caso, tiene una palabra de 4 bytes de la siguiente manera:
Decimal Hex Binary
2427130573 90 AB 12 CD 10010000 10101011 00010010 11001101
Esta es la representación big-endian, donde el byte más significativo ( 0x90
) se almacena primero en la memoria o en la dirección de memoria más baja.
En la representación little-endian, los bytes simplemente se invierten en la memoria de la siguiente manera:
Decimal Hex Binary
2427130573 CD 12 AB 90 11001101 00010010 10101011 10010000
Ahora el byte menos significativo ( 0xCD
) se almacena primero en la memoria o en la dirección de memoria más baja.
Verá que los valores reales de los bytes involucrados no determinan su ubicación en la memoria, sólo su posición en la palabra completa.
El concepto de endianidad se remonta a la arquitectura de la CPU, como se describe en el artículo al que se vincula y ambos métodos tienen ventajas y desventajas.
La forma más natural para los humanos de pensar en los números es en términos de big-endianidad porque así es como tratamos los números decimales. En su caso, 2427130573
se podría decir que el número decimal está escrito en notación big-endian, es decir, el dígito más significativo ( 2
) se escribe primero y su significado disminuye a medida que avanza hacia la derecha (es decir, cambiar el valor del dígito más a la izquierda tiene mayor significado en el valor del número). El número podría escribirse igualmente de izquierda a derecha como 3750317242
con el dígito menos significativo primero, siempre que sepa leerlo de esa manera (EDITAR: dicho sea de paso, esta es la razón por la que los archivos Unicode deben tener una marca de orden de bytes (BOM) almacenada en los primeros 2 bytes del archivo para que el sistema operativo sepa cómo interpretar el archivo).
Sin embargo, para que las computadoras realicen cálculos, suele ser más eficaz almacenar primero el byte menos significativo. Creo que los argumentos a favor de la endianidad grande versus pequeña son un tema de otra discusión y ¡hay muchas fuentes para esto en línea!
¡Espero que esto ayude a aclarar un poco!