Algunas fuentes dicen que los flotadores IEEE754 siempre se almacenan little-endian, pero la especificación IEEE754 para números de coma flotante simplemente no cubre el problema de endianness y puede variar de una máquina a otra. Aquí es código de ejemplo para punto flotante/matriz de bytes de conversión:
#include <stdio.h>
int main(int argc, char** argv){
char *a;
float f = 3.14159; // number to start with
a = (char *)&f; // point a to f's location
// print float & byte array as hex
printf("float: %f\n", f);
printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \
a[0], a[1], a[2], a[3]);
// toggle the sign of f -- using the byte array
a[3] = ((unsigned int)a[3])^128;
//print the numbers again
printf("float: %f\n", f);
printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \
a[0], a[1], a[2], a[3]);
return 0;
}
Es de salida en un pequeño-indio máquina:
float: 3.141590 matriz de bytes: D0: F: 49: 40 float: -3.141590 array de bytes: D0: F: 49: C0
Teóricamente, en una máquina big-endian el orden de bytes se revertiría.
Referencia: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/
El orden de bits afecta a la forma en que los valores se representan en la memoria para _todas_ tipos de múltiples bytes. Los flotantes no son diferentes a los enteros de 32 bits en este caso. –
Los 4 bytes solo se almacenan en orden inverso. –
Lo que me confunde es que la representación de punto flotante no está dividida en bytes (como un entero). Sign es 1 bit, exponente 8 bits y significando es 23. Revertir el orden dificultaría el acceso a los valores. –