| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 992 人关注过本帖
标题:阅读下面的程序输出结果
只看楼主 加入收藏
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
阅读下面的程序输出结果
# include <stdio.h>
main()
{union {long i;int k;char ii;char s[4];} mix ;
mix.i=0x23456789;printf("mix.i=%lx\n",mix.i);
printf("mix.k=%x\n",mix.k);
printf("mix.ii=%x\n",mix.ii);
printf("mix.s[0]=%x\tmix.s[1]=%x\n",mix.s[0],mix.s[1]);
printf("mix.s[2]=%x\tmix.s[3]=%x\n",mix.s[2],mix.s[3]);
return 0;
}
希望能够有详细的解答
搜索更多相关主题的帖子: 阅读 long include return 
2011-09-23 16:18
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:7 
程序代码:
mix.i=23456789
mix.k=23456789
mix.ii=ffffff89
mix.s[0]=ffffff89       mix.s[1]=67
mix.s[2]=45     mix.s[3]=23

32-bit windows 上 long => int => 32-bit little-edian
这个union 内存大小是 4个字节
                      byte[x] byte[x+1] byte[x+2] byte[x+3]
mix :                    0x89      0x67      0x45      0x23   
   i  =>    long:        0x89      0x67      0x45      0x23   => 0x23456789
   k  =>     int:        0x89      0x67      0x45      0x23   => 0x23456789
   ii =>       i:        0x89                                 => 0x89
   s  => char[4]:        0x89      0x67      0x45      0x23   => 0x89, 0x67, 0x45, 0x23

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-09-23 17:06
拾忆
Rank: 2
等 级:论坛游民
帖 子:23
专家分:63
注 册:2011-9-23
收藏
得分:7 
图片附件: 游客没有浏览图片的权限,请 登录注册

你上面的程序有个小错误,你的main()没有遵循NASI C 标准写,
在不同的平台下运行下可能就会报错!
你定义的是共用体,该共用体分配的字节为4。
2011-09-23 17:13
吴军旗
Rank: 5Rank: 5
等 级:职业侠客
帖 子:286
专家分:308
注 册:2011-9-14
收藏
得分:7 
#include <stdio.h>
#include<stdlib.h>
void main()
{union {long int i;int k;char ii;char s[4];} mix ;
mix.i=0x23456789;printf("mix.i=%lx\n",mix.i);
printf("mix.k=%x\n",mix.k);
printf("mix.ii=%x\n",mix.ii);
printf("mix.s[0]=%x\tmix.s[1]=%x\n",mix.s[0],mix.s[1]);
printf("mix.s[2]=%x\tmix.s[3]=%x\n",mix.s[2],mix.s[3]);
system("pause");
}


图片附件: 游客没有浏览图片的权限,请 登录注册




return 0;好像 有问题。。。

最惨的不是忘不了悲伤的回忆,而是那些悲伤的回忆却开始记不清。。。
2011-09-23 17:24
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 2楼 tisyang
我不明白为什么不是98 76 54 32    4个字节具体是怎么存储0x23456789的  还有在vc和tc中除了int占得字节不一样其他类型都相同吗
2011-09-23 17:50
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 4楼 吴军旗
原文
2011-09-23 17:51
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 3楼 拾忆
原文。我不明白为什么不是98 76 54 32    4个字节具体是怎么存储0x23456789的  还有在vc和tc中除了int占得字节不一样其他类型都相同吗
2011-09-23 17:52
拾忆
Rank: 2
等 级:论坛游民
帖 子:23
专家分:63
注 册:2011-9-23
收藏
得分:0 
回复 7楼 ningye
VC 中int 为4个字节,short int 才是2个字节,其它都一样。
不过这只是考虑了平台,还为在考虑OS和硬件。
2011-09-23 19:15
ningye
Rank: 2
等 级:论坛游民
帖 子:33
专家分:22
注 册:2011-9-22
收藏
得分:0 
回复 8楼 拾忆
我不明白为什么不是98 76 54 32    字节具体是怎样存储数据的
2011-09-23 21:05
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:0 
回复 5楼 ningye
因为存储的基本单位是 字节 而不是其他, 一个字节正好可以用两位 16进制数表示而已。。。

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-09-26 08:46
快速回复:阅读下面的程序输出结果
数据加载中...
 
   



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

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