标题:位域结构体的问题
只看楼主
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
结帖率:100%
已结贴  问题点数:20 回复次数:2 
位域结构体的问题
#include<stdio.h>
#include<stdlib.h>
struct bitf
{
    unsigned bit_0:1;
    unsigned dummy:14;
    unsigned bit_15:1;
}*bit_buff;
void main()
{
unsigned short x;char buf[20];
for(;;)
{
      printf("请输入一个整型数字(若想退出请输入0)");
      gets(buf);
      if(buf[0]=='0') break;
      x=(unsigned short)atoi(buf);
      bit_buff=(struct bitf*)&x;
      printf("该数的十六进制是:%0x\n",x);
      printf("该数在本机内表示的最高位是MBS:%d\n",bit_buff->bit_15);
      
      printf("\n");
}

}
输入888  为什么最高位0最低位0
bit_buff=(struct bitf*)&x;
printf("该数在本机内表示的最高位是MBS:%d\n",bit_buff->bit_15);
printf("该数在本机内表示的最低位是LBS:%d",bit_buff->bit_0);
这三步搞不懂    请大家帮忙解释下  
搜索更多相关主题的帖子: 位域 结构体 
2010-01-26 20:58
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:20 

1.bitf的定义是16位(即二进制位)的位域(1位+14位+1位)
2.x是输入的数字串转换过来的,它是一个无符号数(一般它占用2个字节,即16位)
3.bit_buff=(struct bitf*)&x;是将x地址给了指针bit_buff,即转换成了位域(即将16位分成1位+14位+1位).
4.你将数888化为16位二进制看看,从左往右,就是高位到低位.(0000001111111000)

[ 本帖最后由 cnfarer 于 2010-1-26 21:31 编辑 ]

★★★★★为人民服务★★★★★
2010-01-26 21:25
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
得分:0 
哦  这样啊                谢谢
2010-01-26 21:45



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




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

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