在以下代码中
#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
无法理解为什么浮动值会发生变化?
答案 0 :(得分:4)
这与union
无关,float
值未更改。
它没有足够的位来完全表示20.2
二进制浮点数。但没关系,没有人有这么多位。
您应该阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic。