| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1138 人关注过本帖
标题:关于联合的问题
只看楼主 加入收藏
xuqing520
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-8-31
收藏
 问题点数:0 回复次数:10 
关于联合的问题
一个联合应用的简单问题,如下:
#include<stdio.h>
union A
{ char c;
  int a;
  float f;
 }var;

main()
{
 var.a=3.14;
 printf("%d\n",var.c);
 printf("%d\n",var.a);
 printf("%f\n",var.f);
 var.f=3.14;
 printf("%d\n",var.c);
 printf("%d\n",var.a);
 printf("%f\n",var.f);
 printf("%d\n",var.f);
}

运行结果:
3
3
0.000000
-61
-2621
3.140000
0

这是为什么啊?如何解释啊?希望高手给予帮助!谢谢!
搜索更多相关主题的帖子: 问题 
2008-09-18 23:03
alien73
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-9-18
收藏
得分:0 
我用dev和vc6的编译结果:
联合的所有成员引用的是内存相同的位置

3                   // 把3.14浮点常量付给整型和字符型编译器会按整型处理,所以为3
3                   // 这里有是三
0.000000            // 编译器按浮点型处理时,发现4.20389539e-045比浮点型最小值1.175494351e-38F 还要小,所以按0处理
-61                 // 把3.14浮点常量付给浮点型 此时内存数据为1000000010010001111010111000011,截后8位是-61
1078523331          // 按整型处理
3.140000            // 浮点型
1610612736          //把浮点值强制转化为整型输出截断小数点后面部分

[[it] 本帖最后由 alien73 于 2008-9-19 00:24 编辑 [/it]]
2008-09-19 00:03
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
楼上正解!

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-09-19 02:23
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
联合已经过时了……

上次默写C关键字,记起来31个单单忘了union,太丢脸了…………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-19 02:41
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
C关键字,我连10个也写不出来

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-09-19 02:42
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
[bo][un]随心[/un] 在 2008-9-19 02:42 的发言:[/bo]

C关键字,我连10个也写不出来



你这已到了另一种境界

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-09-19 17:36
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
我比较喜欢用联合
特别是一个指针指向不同类型的数据的时候
不用联合就是
*((int *)p)=6;
用联合就是
typedef union {
    int *p_int;
    int *p_float;
} ptr;
ptr.p_int=6
看上去舒服一点

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-09-19 19:24
xuqing520
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-8-31
收藏
得分:0 
请问各位大侠,整型和浮点型数据在内存中是如何存贮的?差异在哪里啊?我希望知道!谢谢!
2008-09-19 19:36
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
整数是以是以二进制储存的 为了方便通常用16进制表示
以short为例子 一个short占2个字节16个位
比如3就是0x0003
16就是0x0010
-1就是0xffff -> 16位的整数0xffff+0x0001=0x0000
-2就是0xfffe
浮点就比较麻烦了...
如果你确实想知道可以去看
http://blog.

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-09-19 20:16
xuqing520
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-8-31
收藏
得分:0 
衷心地谢谢楼上这位大侠!
2008-09-21 11:38
快速回复:关于联合的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030119 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved