リトル エンディアン用の Visual Studio TC コンパイラを使用しています。以下はコードの一部です。
void main()
{
float c = 1.0;
int a = 0x3F800000;
int *ptr = (int *)&c;
printf("\n0x%X\n", *ptr);
printf("\na = %f", a);
printf("\nc = %f", c);
return;
}
出力は次のとおりです。
0x3F800000
a = 0.000000
c = 1.000000
浮動小数点値 1.0 は 0x3F800000 であり、リトル エンディアンのメモリに 00 00 80 3F として格納されます。int a にも同じ値が代入されます。printf はどのように int a に対して 0.000000 を出力し、float c に対して 1.000000 を出力しますか? printf で %f を使用して印刷すると、すべての整数値が 0.000000 として印刷されるのを見てきました。
また、printf は可変引数関数なので、レジスタに渡された値が int か float かをどのように判断するのでしょうか?