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);
}
我要赚赏金打赏帖 |
|
|---|---|
| 给28BYJ-48三自由度机械臂加一个网页控制台被打赏¥32元 | |
| 用28BYJ-48电机从零搭一台三自由度机械臂被打赏¥33元 | |
| 【英飞凌开发经验】ModusToolbox配置EdgeTalk外设被打赏¥27元 | |
| 基于BQ76952PFBR的BMS保护板热插拔损坏的原因和处理措施被打赏¥32元 | |
| 三分钟快速上手搭建nRF Connect SDK开发环境(VSCode)被打赏¥25元 | |
| 告别手动建模:我让AI用FreeCAD画了个开发板外壳被打赏¥30元 | |
| 【瑞萨RA8D1测评】总结收官——从IMU动作识别到LVGL桌宠被打赏¥33元 | |
| 【瑞萨BLE/WIFI模块测评】MPU6050双链路对比被打赏¥30元 | |
| 【瑞萨BLE/WIFI模块测评】DA14531被打赏¥28元 | |
| 【瑞萨BLE/WI-FI模块测评】DA16200被打赏¥28元 | |
我要赚赏金
