结构体位域操作,和共用体配合使用
#include <iostream>
#include "stdio.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//结构体定义变量位分配
typedef struct _GetData{
unsigned char a :5;
unsigned char b :3;
}GetData;
//共用体使用结构体位域操作来创建控制变量每一bit,并且可以直接一体使用
typedef union _c{
GetData d;
uint8_t e;
}c;
int main(int argc, char** argv) {
c f;
f.d.a =1;
f.d.b =2;
printf("f = %d\n",f.e);
printf("f.a = %d\n",f.d.a);
printf("f.b = %d\n",f.d.b);
return 0;
}
输出可得
解释:
GetData定义了一个结构体变量,该结构体变量将unsigned char的bit进行了重新分配,其中低5bit为a;高3bit为b。
c定义了一个共用体变量,其中将GetData和unit8_t共用8bit空间,因为GetData变量将bit更细的划分了。
main中通过c创建共用体变量f,通过GetData的结构体变量定义,所以可以进行f.d.a和f.d.b操作,操作这8bit的高3和低5bit。
最后输出可以看到,输出f.e为8bit作为uint8_t的一个整体,也可单独输出bit,a、b。
---------------------------------------------------------------------------------
经过测试,若不使用共用体将结构体位域作为1个变量,输出异常。
查询ai发现,结构体不能直接输出c,所以此处操作错误。
但是因为作为结构体,所以不能直接整体输出和使用。需要配合共用体使用。