5.6.2 位域变量的使用

位域变量的使用与结构变量、联合变量和枚举变量的使用十分相似。位域变量的位域名引用的一般形式如下。


位域变量名.位域名


在C51中,位域允许用各种格式输出。在C51语言中,用户也可以定义位域指针。其使用方式与前面介绍的结构指针、联合指针相似。当位域变量定义为指针时,要使用“->”符号来访问位域,其一般表示形式如下。


位域指针名->位域名


位域变量和位域指针在程序中的使用,示例如下。


include<stdio.h>//头文件

void main()//主函数

{

struct btest//声明位域

{

unsigned a:1;

unsigned b:3;

unsigned c:4;

}mybtest,*pbit;//声明位域变量和位域指针

mybtest.a=1;//位域变量赋值

mybtest.b=7;//位域变量赋值

mybtest.c=15;//位域变量赋值

printf(“%d,%d,%d\n”,mybtest.a,mybtest.b,mybtest.c);//输出结果

pbit=&bi;//位域指针赋值

pbit->a=0;//执行运算

pbit->c|=1;

pbit->b&=3;

printf(“%d,%d,%d\n”,pbit->a,pbit->b,pbit->c);//输出结果

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


1,7,15

0,3,15


本例中,先声明了位域结构btest。3个位域a、b、c长度分别是1、3、4。并同时声明了位域变量mybtest和位域指针pbit。在程序中,分别采取了两种方式对位域变量进行操作。首先给位域变量的每个位域赋值,然后输出其值。将位域变量mybtest的地址赋给位域指针pbit,接着分别采用复合运算符“&=”和“|=”对位域进行位运算,最后使用指针引用位域输出结果。