当前位置: 首页 > news >正文

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

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

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

相关文章:

  • 数据集/API 笔记 新加坡相对湿度数据
  • 基于nginx的灰度发布解决方案
  • WPF 如何使文本显示控件支持显示内容滚动显示
  • Oracle 数据库基础入门(五):限制查询与范式三约定深度解析
  • 15分钟实战:SpringBoot + Vue2快速构建AI对话系统(集成DeepSeek)
  • 进程间通信方式:对列、管道、共享内存
  • Oracle 数据库基础入门(四):分组与联表查询的深度探索(下)
  • 安路FPGA开发入门:软件安装与点灯与仿真(TangDynasty ModelSim)
  • VAE中的编码器(Encoder)详解
  • pg pg_prewarm用法
  • ICP-通过一组匹配的3D点估计相机运动
  • 【go】time.after内存泄漏
  • 使用 USRP 和 OpenAirInterface 构建实时神经接收器原型
  • 【Java项目】基于SpringBoot的超市进销存系统
  • React antd的datePicker自定义,封装成组件
  • 【数据挖掘】Pandas之DataFrame
  • 通过多线程同时获取H264和H265码流
  • 河道水位尺位数据集目标检测
  • 静态时序分析:SDC约束命令set_clock_jitter详解
  • halcon学习笔记1
  • 南部战区位南海海域进行例行巡航
  • 对话|贝聿铭设计的不只是建筑,更是生活空间
  • 千亿市值光储龙头董事长向母校合肥工业大学捐赠1亿元
  • 全国电影工作会:聚焦扩大电影国际交流合作,提升全球影响力
  • 脱发后怎么把头发养回来?脱发自救指南来了
  • 国家发改委:建立实施育儿补贴制度