好吧,printf并没有把1以浮点数格式解码
#include <stdio.h>
int main(void)
{
int x = 0x42f60000;
printf("%d\n", x);
printf("%f\n", x);
printf("%f\n", *(float *)&x);
return 0;
}
int x = 0x42f60000;
00D5424E C7 45 F8 00 00 F6 42 mov dword ptr [x],42F60000h
printf("%d\n", x);
00D54255 8B 45 F8 mov eax,dword ptr [x]
00D54258 50 push eax
00D54259 68 98 6B D5 00 push offset string "%d\n" (0D56B98h)
00D5425E E8 0D D1 FF FF call _printf (0D51370h)
00D54263 83 C4 08 add esp,8
printf("%f\n", x);
00D54266 8B 45 F8 mov eax,dword ptr [x]
00D54269 50 push eax
00D5426A 68 30 6B D5 00 push offset string "%f\n" (0D56B30h)
00D5426F E8 FC D0 FF FF call _printf (0D51370h)
00D54274 83 C4 08 add esp,8
printf("%f\n", *(float *)&x);
00D54277 F3 0F 5A 45 F8 cvtss2sd xmm0,dword ptr [x]
00D5427C 83 EC 08 sub esp,8
00D5427F F2 0F 11 04 24 movsd mmword ptr [esp],xmm0
00D54284 68 30 6B D5 00 push offset string "%f\n" (0D56B30h)
00D54289 E8 E2 D0 FF FF call _printf (0D51370h)
00D5428E 83 C4 0C add esp,0Ch
至于为什么输出 0.000000
这和printf内部的实现有关 |