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,接着分别采用复合运算符“&=”和“|=”对位域进行位运算,最后使用指针引用位域输出结果。