整数値の場合、リトルエンディアンとビッグエンディアンの表現はかなり単純です。ビッグエンディアンとリトルエンディアンの浮動小数点の違いは何ですか?
しかし、リトルエンディアンフロートがビッグエンディアンフロートとどのように違うのかはわかりません。
最後に、より一般的に使用されているものを知りたいと思います。
整数値の場合、リトルエンディアンとビッグエンディアンの表現はかなり単純です。ビッグエンディアンとリトルエンディアンの浮動小数点の違いは何ですか?
しかし、リトルエンディアンフロートがビッグエンディアンフロートとどのように違うのかはわかりません。
最後に、より一般的に使用されているものを知りたいと思います。
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/
SPARCマシンの場合:float:3.141590、バイト配列:40:49:F:D0; float:3.141560、バイト配列:40:49:F:50 – automatthias
これはまさにその実装方法です! – Owl
エンディアンは、複数のバイトで構成される値を構成するバイトのプロパティです。浮動小数点数は4または8バイトを要するため、エンディアンはどのエンディアンで読み込むべきかを指示します。これは、正確にはで、整数値と同じです。
エンディアンは、値が_all_マルチバイトタイプ用のメモリで表現されている方法に影響します。この場合、浮動小数点数は32ビット整数と変わりません。 –
4バイトは逆の順序で格納されます。 –
浮動小数点表現はバイト単位で(整数のように)分割されていません。サインは1ビット、指数は8ビット、有効数字は23です。順序を逆にすると値にアクセスするのが難しくなります。 –