标题:一个联合的小问题
只看楼主
yt414204458
Rank: 2
等 级:论坛游民
帖 子:260
专家分:55
注 册:2008-3-1
结帖率:50%
 问题点数:0 回复次数:7 
一个联合的小问题
main()
{union
  {char ch[2];
   int d;
  }s;
s.d=0x4321;
printf("%x,%x\n",s.ch[0],s.ch[1]);
}
在16位编译系统上,程序执行后的输出结果是什么?
这里为什么要提一下在16位编译系统上,这个题应该怎么做?
搜索更多相关主题的帖子: 联合 
2008-08-25 11:26
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
得分:0 
这里为什么要提一下在16位编译系统上?
16位->int 2个字节
32位->int 4个字节

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-08-25 11:33
yt414204458
Rank: 2
等 级:论坛游民
帖 子:260
专家分:55
注 册:2008-3-1
得分:0 
回复 2# liyanhong 的帖子
知道这和32位上的执行结果有什么不同吗?这个题的结果又是什么?

一切从爱C开始
2008-08-25 11:35
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
得分:0 
这要算的呀  我现在在网吧  好麻烦你是可以想像的啊

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-08-25 11:43
yt414204458
Rank: 2
等 级:论坛游民
帖 子:260
专家分:55
注 册:2008-3-1
得分:0 
哪个不在网吧啊,帮着看一下

一切从爱C开始
2008-08-25 17:50
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
得分:0 
结果用16进制表示
21  43  晕死   
我不确定了

[[it] 本帖最后由 liyanhong 于 2008-8-27 21:12 编辑 [/it]]

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-08-27 21:04
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
得分:0 
地址:  0  1
       ------
        21 43

你可以把一个int写入到文件里,
fprintf(stream, "%d", 0x4321);

然后用ultraedit看下16进制查看就知道了。

数据在内存或者文件里的存储,是低地址存储低位的数据,高地址存储高位的数据。因此比如数据运算以后如果溢出,或者大数据类型向小数据类型转,一般是高位被丢失。

如果你曾经设计过二进制文件格式,IO,那么这些东西就会很熟悉了。

[[it] 本帖最后由 hoodlum1980 于 2008-8-28 04:48 编辑 [/it]]
2008-08-28 04:42
xzx1002002
Rank: 2
等 级:论坛游民
帖 子:68
专家分:27
注 册:2006-3-7
得分:0 
ls几位正解。

那32位机呢?

地址: 0  1   2   3
----------------------
      21 43  0   0

那结果和16位机不是一样么。
2008-08-28 12:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-229772-1-1.html




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

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