1.位域及位域变量的定义
位域的定义形式:
struct 位域结构名
{
 类型说明符 位域名1:位域长度1;
 ...
 类型说明符 位域名n:位域长度n;
};
位域变量的定义
struct byte_struct
{
 int x:8;
 int y:2;
 int z:6;
}field;
说明:field为byte_struct类型变量,共占2个字节。其中位域x占8位,
   位域y占2位,位域z占6位。
2.位域定义注意事项
(1)单个位域必须存储在同一个字节,不能跨字节存储。如果一个字节
   所剩空间不够存放另一个位域,应从下一单元起存放该位域,也可以
   有意使用空域使某位域从下一单元开始,如:
   struct byte_struct
   {
    unsigned a:6;
    unsigned  :0;  //空域
    unsgined b:4;  //从下一单元开始存放
    unsgined c:4;
   }two_byte;
说明:a占第一字节的6位,后2位填0表示不使用,称为空域;b从第二字节开始,
      占用4位,c占用4位。
(2)位域的长度不能大于一个字节的长度,即不能超过8位。
   例如,下面的定义是非法的:
   struct bs
   {
    unsigned a:2;
    unsigned b:10;  //位域长度不能大于8位
   };
(3)位域可以无位域名,这时只用来做填充或调整位置,而不能使用。
   例如:
   struct bs
   {
    unsigned a:4;
    unsigned :4;     //此4位不能使用
   };
3.位域的使用
  位域从本质上说就是一种结构类型,不过其成员是按二进制位分配的,所以
  位域的使用和结构成员的使用相同。
  例:普通位域变量和指针位域变量的使用。
  #include <stdio.h>
  
  //位域声明
  struct byte_struct
  {
   unsigned a:4;
   unsigned b:2;
   unsigned c:1;
  };
  
  void main()
  {
   struct byte_struct bit;    //定义变通位域变量
   //普通位域变量的使用
   bit.a=1;
   bit.b=7;
   bit.c=15;
   printf("%d,%d,%d\n",bit.a,bit.b,bit.c);
   
   struct byte_struct *pbit;   //定义指针位域变量
   //指针位域变量的使用
   pbit=&bit;
   pbit->a=0;
   pbit->b&=3;
   pbit-c|=1;
   printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c); 
  }										
					
					
							
					
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |
			
			
			
						
			
 我要赚赏金
