C联盟和同时分配给成员

时间:2014-09-10 13:32:50

标签: c variable-assignment unions member-access

在以下代码中

#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);
}

我理解联盟一次只能拥有一个值。所以当我赋值char时,int会被覆盖,然后当我赋值floatValue时,char会被覆盖。所以我期待int和char变量的一些垃圾值和浮点变量的20.200000,因为它是要分配的最后一个值。但以下是我在VS Express以及gcc

上获得的输出
1101109658 Ü 20.200001

无法理解为什么浮动值会发生变化?

1 个答案:

答案 0 :(得分:4)

这与union无关,float值未更改。

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

您应该阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic