0

在下面的代码中

#include<stdio.h>
int main()
{
    union myUnion
    {
        int intVar;
        char charVar;
        float floatVar;
    };
    union myUnion localVar;
    localVar.intVar = 10;
    localVar.charVar = 'A';
    localVar.floatVar = 20.2;
    printf("%d ", localVar.intVar);
    printf("%c ", localVar.charVar);
    printf("%f ", localVar.floatVar);
}

我知道 union 一次只能保存一个值。因此,当我分配 char 值时,int 将被覆盖,n 然后当我分配 floatValue 时,char 将被覆盖。所以我期待 int 和 char 变量有一些垃圾值,float 变量有 20.200000,因为它是最后一个要分配的值。但以下是我在 VS Express 和 gcc 上得到的输出

1101109658 Ü 20.200001

无法理解为什么浮点值会改变?

4

1 回答 1

4

这与 无关union,并且float值没有改变。

它根本没有足够的位来20.2完全表示为二进制浮点数。但没关系,没有人有那么多位。

你应该阅读每个计算机科学家应该知道的关于浮点运算的知识

于 2014-09-10T13:35:16.630 回答