2012-01-29 14 views
6

Dla wartości całkowitych jest całkiem prosta różnica w małej endian i dużej endian reprezentacji.Jaka jest różnica między dużymi i małymi pływakami endian?

Ale nie jest dla mnie jasne, jak mały pływak endianowy różni się od dużego pływaka endian.

Na koniec chciałbym wiedzieć, który z nich jest częściej używany.

+11

endianowości wpływa na sposób, w jaki wartości są wyświetlane w pamięci _all_ typu multi-bajtowych. W tym przypadku floats nie różnią się od 32-bitowych liczb całkowitych. –

+0

4 bajty są po prostu zapisywane w odwrotnej kolejności. –

+2

Co mnie myli, to to, że reprezentacja zmiennoprzecinkowa nie jest dzielona na bajty (jak liczba całkowita). Znak jest 1 bitowy, wykładnik 8 bitowy, a significand jest równy 23. Odwrócenie kolejności może utrudnić dostęp do wartości. –

Odpowiedz

6

Niektóre źródła podają, że pływaki IEEE754 są zawsze przechowywane w wersji little-endian, ale specyfikacja IEEE754 dla liczb zmiennoprzecinkowych po prostu nie uwzględnia problemu endianiczności i może się różnić w zależności od urządzenia. Oto przykładowy kod dla zmiennoprzecinkowej/bajtów konwersji tablicy:

#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; 
} 

To wyjście na mało indian maszyny:

pływak: 3,141590 bajt array: D0: F: 49: 40 pływak: -3,141590 tablica bajtów: D0: F: 49: C0

Teoretycznie na maszynie big-endian kolejność bajtów byłaby odwrotna.

odniesienia: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/

+2

Na maszynie SPARC: float: 3.141590, tablica bajtów: 40: 49: F: D0; float: 3.141560, tablica bajtów: 40: 49: F: 50 – automatthias

+0

Dokładnie tak zaimplementowano! – Owl

11

Endianness właśnie jest właściwością bajtów składających się z wielu bajtów. Ponieważ liczba zmiennoprzecinkowa zajmuje 4 lub 8 bajtów endianness mówi ci, w jakiej kolejności je czytać. Jest to dokładnie tak samo jak z wartościami całkowitymi.

Powiązane problemy