我正在使用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。同样的值被赋给了整数a。当使用printf打印int a时,为什么会打印出0.000000,而打印float c时则会打印1.000000?我曾经看到,当使用printf中的%f打印所有整数时,它都会打印出0.000000。
另外,由于printf是变量参数函数,它如何知道在寄存器中传递的值是整数还是浮点数?
%f
,并给定一个类型为int的参数。 - Koushik Shettyfloat
类型的参数传递给函数时,它会被提升为double
类型。如果想要了解具体发生了什么,可以让编译器输出汇编代码,并比较每个printf()
语句生成的代码之间的差异。 - Adam Liss