位字段可以直接定义和访问一个字中的位字段,而不需要通过按位逻辑运算符。在一个机器字节中包含多个对象(如按网络协议传输消息、硬件设备接口数据传输等)时,这种方法可以简单地提取或压缩对应数据。例如。
#include "stdio.h"
#include "stdlib.h"
#include "type_traits"
using namespace std;
int main()
{
//struct flags包括6个字段,第三、五两个字段为无用字段,故没有命名
struct {
unsigned int is_keyword :1;
unsigned int is_extend :2;
unsigned int :3;
unsigned int is_static :2;
unsigned int :2;//下一字节
unsigned int is_next :2;
} flags[5];
//定义指针,为其赋值
unsigned int *chr = (unsigned int*) &flags;
//数据压缩
*chr = 0x03f1;
//数据提取
printf("【0】flags.is_keyword=%i, flags.is_extend=%i, flags.is_static=%i, flags.is_next=%i\n",
flags[0].is_keyword,flags[0].is_extend, flags[0].is_static,