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

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

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;
};

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