2012-01-29 12 views
6

Para valores enteros, es bastante simple la diferencia en la representación de little endian y big endian.¿Cuál es la diferencia entre flotadores endian grandes y pequeños?

Pero no está claro para mí cómo un pequeño flotador endian se diferencia de un gran flotador endian.

Y, por último, me gustaría saber cuál es el más utilizado.

+11

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. –

+0

Los 4 bytes solo se almacenan en orden inverso. –

+2

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. –

Respuesta

6

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/

+2

En una máquina SPARC: flotante: 3.141590, matriz de bytes: 40: 49: F: D0; flotante: 3.141560, matriz de bytes: 40: 49: F: 50 – automatthias

+0

¡Así es exactamente como lo implementó! – Owl

11

Endianness solo es una propiedad de los bytes que componen un valor compuesto por varios bytes. Como un número de punto flotante ocupa una longitud de 4 u 8 bytes, la endianidad le indica en qué orden leerlos. Esto es exactamente lo mismo que con valores enteros.

Cuestiones relacionadas