【问题标题】:C Union and simultaneous assignment to members [duplicate]C联合和同时分配给成员[重复]
【发布时间】:2014-09-10 13:32:50
【问题描述】:

在下面的代码中

#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

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

【问题讨论】:

  • 如果我能找到一个像样的,我会关闭它作为重复。您的问题与工会无关,与浮点数有关。阅读已经发布的 Goldberg 链接和C FAQ

标签: c variable-assignment unions member-access


【解决方案1】:

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

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

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

【讨论】:

  • 哦...谢谢 :) 将通过链接...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
相关资源
最近更新 更多