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/
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. –
4 bajty są po prostu zapisywane w odwrotnej kolejności. –
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. –