2012-01-29 24 views
6

整数値の場合、リトルエンディアンとビッグエンディアンの表現はかなり単純です。ビッグエンディアンとリトルエンディアンの浮動小数点の違いは何ですか?

しかし、リトルエンディアンフロートがビッグエンディアンフロートとどのように違うのかはわかりません。

最後に、より一般的に使用されているものを知りたいと思います。

+11

エンディアンは、値が_all_マルチバイトタイプ用のメモリで表現されている方法に影響します。この場合、浮動小数点数は32ビット整数と変わりません。 –

+0

4バイトは逆の順序で格納されます。 –

+2

浮動小数点表現はバイト単位で(整数のように)分割されていません。サインは1ビット、指数は8ビット、有効数字は23です。順序を逆にすると値にアクセスするのが難しくなります。 –

答えて

6

IEEE754浮動小数点は常にリトルエンディアンに格納されていますが、浮動小数点数のIEEE754仕様ではエンディアン問題をカバーしていないため、機械によって異なる場合があります。

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

それは少し、インドのマシン上の出力です:

フロート:3.141590 バイト配列:D0:F:49:40 フロート はここで浮動小数点/バイト配列の変換のためのサンプルコードです: -3.141590 バイト配列:D0:F:49:C0

理論上、ビッグエンディアンマシンでは、バイトの順序が逆になります。

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

+2

SPARCマシンの場合:float:3.141590、バイト配列:40:49:F:D0; float:3.141560、バイト配列:40:49:F:50 – automatthias

+0

これはまさにその実装方法です! – Owl

11

エンディアンは、複数のバイトで構成される値を構成するバイトのプロパティです。浮動小数点数は4または8バイトを要するため、エンディアンはどのエンディアンで読み込むべきかを指示します。これは、正確にはで、整数値と同じです。

関連する問題