当前位置: 首页 > 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
  • wordpress限制单独站点大小/微信小程序开发费用
  • 程序员自己做项目的网站/官网优化哪家专业
  • 网站制作咨询电话/seo资讯网
  • 河北平台网站建设/seo研究协会
  • 徐州网站建设推广/2022年最火的关键词
  • 1688一件代发详细步骤/seo排名点击