结构体位域操作,和共用体配合使用
- IT业界
- 2025-09-13 20:48:02

#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,所以此处操作错误。
但是因为作为结构体,所以不能直接整体输出和使用。需要配合共用体使用。
结构体位域操作,和共用体配合使用由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“结构体位域操作,和共用体配合使用”