|
发表于 2018-2-24 23:53:24
|
显示全部楼层
好吧,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内部的实现有关 |
|