浮動小数点変数が与えられ、そのバイト表現が何であるかを知りたがっていました。そこで私は IDEOne に行き、そのための簡単なプログラムを書きました。しかし、驚いたことに、実行時エラーが発生します。
#include <stdio.h>
#include <assert.h>
int main()
{
// These are their sizes here. So just to prove it.
assert(sizeof(char) == 1);
assert(sizeof(short) == 2);
assert(sizeof(float) == 4);
// Little endian
union {
short s;
char c[2];
} endian;
endian.s = 0x00FF; // would be stored as FF 00 on little
assert((char)endian.c[0] == (char)0xFF);
assert((char)endian.c[1] == (char)0x00);
union {
float f;
char c[4];
} var;
var.f = 0.0003401360590942204;
printf("%x %x %x %x", var.c[3], var.c[2], var.c[1], var.c[0]); // little endian
}
IDEOne では、次のように出力されます。
39 ffffffb2 54 4a
実行時エラーとともに。実行時エラーが発生するのはなぜb2
ですかffffffb2
? 私の推測では、b2
符号拡張です。