| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 516 人关注过本帖
标题:共用体问题
只看楼主 加入收藏
fcyvhk
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-7-14
结帖率:100%
收藏
 问题点数:0 回复次数:3 
共用体问题

程序如下
要先申明函数的
#include "stdio.h"
union un
{
int t;
char c[2];
}
main()
{
union un x;
x.c[0]=10;
x.c[1]=1;
printf("\n%d",x.i);
}

答案是266 说是共用体c[0]在低字节,c[1]在高字节, 所以x.i为266 我不知道什么是高字节 和字节 为什么x.i就要等于266呢??? 求教

搜索更多相关主题的帖子: include 
2007-09-05 20:36
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 

共用体故名思义共同使用同一段内存空间,更具你的题目un占用内存为2个字节。
00H 01H
[ ][ ] <- 一个[]表示1个字节
[ t ] <- t占用2个字节
[c[0]][c[1]] <- c[0]和c[1]个占一个字节
然而内存是从低地之到高地址分布的,由上图可以知道。
那么你为c[0]和c[1]复制以后看看内存分布情况(我们知道10的二进制是00001010,1的二进制是00000001,这里写8位二进制是因为一个字节占用8位)
[00001010][00000001] <- 这个就是c[0]和c[1]的分布
然后再看t,t是占两个字节,分为高8位和低8位,根据低地址填地位,高低址填高位,那么c[0]对应t的低地址而c[1]对应t的高地址,分布如下
高8位 低8位
t [00000001 00001010]
将这个二进制化成十进制,就是266了。

[此贴子已经被作者于2007-9-5 20:55:47编辑过]


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2007-09-05 20:50
fcyvhk
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-7-14
收藏
得分:0 
以下是引用yuki在2007-9-5 20:50:55的发言:

共用体故名思义共同使用同一段内存空间,更具你的题目un占用内存为2个字节。
00H 01H
[ ][ ] <- 一个[]表示1个字节
[ t ] <- t占用2个字节
[c[0]][c[1]] <- c[0]和c[1]个占一个字节
然而内存是从低地之到高地址分布的,由上图可以知道。
那么你为c[0]和c[1]复制以后看看内存分布情况(我们知道10的二进制是00001010,1的二进制是00000001,这里写8位二进制是因为一个字节占用8位)
[00001010][00000001] <- 这个就是c[0]和c[1]的分布
然后再看t,t是占两个字节,分为高8位和低8位,根据低地址填地位,高低址填高位,那么c[0]对应t的低地址而c[1]对应t的高地址,分布如下
高8位 低8位
t [00000001 00001010]
将这个二进制化成十进制,就是266了。


厉害!!又学到不少````

2007-09-05 22:06
zgx_921
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-9-4
收藏
得分:0 
什么机器啊?现在的sizeof(int)不都是等于4了么?

2007-09-06 10:44
快速回复:共用体问题
数据加载中...
 
   



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

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