浮点输出格式产生奇怪的值

Eli*_*gem 2 c format floating-point

好的:
我发现这是一个骗局问题

对于我对这个问题的回答,我测试了如果我传递一个浮点数会发生什么printf,并将其打印为十六进制值.
我使用的代码就是这样:

int main()
{
    float i = 12.2;
    printf("%x == %f\n", i, i);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果有点令人惊讶,至少可以说:

60000000 == 26815622268991053043690768862555225929794561970930945383754133458631904088629457662404735694345936594619420127195201411004744101710347755649498829446709248.000000
Run Code Online (Sandbox Code Playgroud)

现在这不太可能,我想.如果我将格式字符串的顺序切换为"%f == %x\n",则float显示为well(12.200000).
现在这引起了我的兴趣.所以我做了一些实验

printf("%f == %x == %f\n", i, i, i);
Run Code Online (Sandbox Code Playgroud)

向我透露,%f格式%x使用失败了.所以我尝试过:

printf("%f == %x == %f\n", 12.2, i, 12.2);
Run Code Online (Sandbox Code Playgroud)

哪个让我更加抓我的面条:

12.200000 == 60000000 == 190359837254612272720121546180914982603183590679420528733621571728996711854558612668142684377801318191569131534073063745617380878171517108433746379972393615159806611654135195336789983232.000000
Run Code Online (Sandbox Code Playgroud)

而且,在你问之前:

printf("%f == %x == %f\n", 12.2f, i, 12.2f);
Run Code Online (Sandbox Code Playgroud)

收益率:

12.200000 == 60000000 == 26815622268991053043690768862555225929794561970930945383754133458631904088629457662404735694345936594619420127195201411004744101710347755649498829446709248.000000
Run Code Online (Sandbox Code Playgroud)

当我printf("%f\n", i)在上面发布的语句之前或之后打印时,输出就像我期望的那样.

有谁知道这里发生了什么?

hac*_*cks 6

您的程序的行为未定义.错误的转换说明符调用未定义的行为.