标题:共用体问题
只看楼主
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



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




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

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