首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于位域的疑问,该怎么处理

2012-03-20 
关于位域的疑问有如下两种关于位域的结构体定义方式:struct temp1{unsigned a:1unsigned b:2unsigned c:

关于位域的疑问
有如下两种关于位域的结构体定义方式:

struct temp1
{
  unsigned a:1;
  unsigned b:2;
  unsigned c:1;
};

struct temp2
{
  unsigned char a:1;
  unsigned char b:2;
  unsigned char c:1;
};

请问以上两种方式定义的区别在哪里?char这个数据类型在这里起什么作用?谢谢!

[解决办法]
更正:
temp1占用4个字节 (unsigned int)
temp2占用1个字节 (unsigned char)
[解决办法]
// 结构体temp1与temp2的长度都是占4个bit,(一个字节有8bit)
// 结构体temp1的unsigned和int是相对的,就是说可以把一个位域变量定义成无符号unsigned或有符号 int类型。
// char这个数据类型是起说明位域变量类型作用,就是把结构体temp2的位域变量a,b,c定义为char类型。
[解决办法]
楼主可以参考一下:
http://blog.cec.pandabuying.com/true_toyou/153702.aspx
[解决办法]
这就是C89的int默认隐含声明,没声明就默认是int,所以占的字节位数不一样
但C99不支持,而且不同的编译器,int的大小可能也不一样
结贴的时候给我几分
[解决办法]
按楼主的结构体定义来说,没有什么区别,都占4bit,位的应用在嵌入式的应用的比较多,之所以区分unsigned,与unsigned char类型,是因为这样是为了整体赋值时,这样可以控制其类型,当然楼主应可以这样做,
struct temp2
{
unsigned char a:1;
unsigned char b:2;
unsigned char c:1;
unsigned char resv:4;
};


union TEMP2_REG {
unsigned char all;
struct temp2 bit;
};

这样就可以整体引用与按位引用了。如果楼主对嵌入式有一点了解的话,那么这很样更好理解。

热点排行