gpt4 book ai didi

c - union整数成员返回union中的数据,float显示异常

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:40 25 4
gpt4 key购买 nike

在下面的代码中,如果我打印 union 成员的值,未分配的成员 int i; 输出 515。我发现它给出了整个 union 的位置权重。

Q :-但是如果声明为 float i;,它会输出 0.000。这种行为的任何特殊原因。这是如何工作的?

#include<stdio.h>
int main()
{
union a
{
float i;
char ch[2];
};
union a u;
u.ch[0] = 3;
u.ch[1] = 2;
printf("%d, %d, %f\n", u.ch[0], u.ch[1], u.i);
return 0;
}

最佳答案

通过使用 union ,该程序使两种不同的数据类型(在本例中为 int/float 和 char[])共享相同的内存区域。接下来,程序将内存区域分配为 char,然后将其作为 int/float 读回。仅当写为 char 的值在读回它的数据类型的上下文中“有意义”时,这才能成功。正如您所观察到的,对于“int”,它可能会返回一些值,因为 C 不会对整数值应用任何特殊编码(但是,另请参阅 twos-complement )。但是,实数通常使用 IEEE754 编码标准,因此,读回的值取决于解码的内容。我认为这可能也取决于编译器,因为我看到同一代码的“nan”(不是数字)。

#include<stdio.h>
int main()
{
union a
{
float i;
char ch[2];
};
union a u;
float f = 0.0;

u.ch[0] = 3;
u.ch[1] = 2;
printf("%d, %d, %f, %f\n", u.ch[0], u.ch[1], u.i, f);
return 0;
}

输出:3, 2, 南, 0.000000

关于c - union整数成员返回union中的数据,float显示异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57035662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com