结构体位域操作,和共用体配合使用

#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,所以此处操作错误。

但是因为作为结构体,所以不能直接整体输出和使用。需要配合共用体使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值