c语言共用体变量值的问题

#include
main()
{ union data { long w; float x; char c; };
执行下列语句后a的十进制值是多少?
union data a;
a.x=3.1416;
a.w=123456;
a.c='x';

2个回答

共同体的最大特点就是多个数据共享一个内存。而内存的大小是看共同体里面最大成员而定。
问题中的共同体,long 和 float 所占的字节大小一样也是最大(char只占一个字节),为4个字节。
union data a;
a.x=3.1416;//这时内存中的值为0000 0000 0000 0000 0111 1010 1011 1000
a.w=123456;//这是内存中的值被覆盖,变为0000 0000 0000 0001 1110 0010 0100 0000
a.c='x';//因为'x'的在二进制中为0111 1000 所以覆盖部分只有最后一个字节,这时a的值为0000 0000 0000 0001 1110 0010 0111 1000
而这时a的十进制值对应为123512.
使用编译器编译后也是这个答案。

u014306011
天命王子 回复航爷: 不好意思,我按计算器时少按了一个点,其实结果是0011.0010 0100 0011 1111 1111 1111 1111,但是这个结果不影响下面的答案,因为x和w所占内存空间是一样大的,下面w赋值之后就将上面的值全部覆盖掉了,所以对最终结果没有影响。
5 年多之前 回复
u014306011
天命王子 回复航爷: 不好意思,我按计算器时少按了一个点,其实结果是0011.0010 0100 0011 1111 1111 1111 1111,但是这个结果不影响下面的答案,因为x和w所占内存空间是一样大的,下面w赋值之后就将上面的值全部覆盖掉了,所以对最终结果没有影响。
5 年多之前 回复
u010916347
航爷 a.x=3.1416;//这时内存中的值为0000 0000 0000 0000 0111 1010 1011 1000 怎么得到的?
5 年多之前 回复
立即提问