解码C语言位字段

news/2025/9/20 11:45:54/文章来源:https://www.cnblogs.com/YouEmbedded/p/19102217

一、位字段的定义

位字段允许在结构体中按 位(bit) 为单位分配成员空间,用于紧凑存储布尔标志或小范围整数值,节省内存。常用于硬件寄存器操作、协议数据解析等场景。

二、位字段的语法

1. 基本声明

struct 结构体名 {类型 成员名 : 位宽;
};
  • 类型:必须为整型(intunsigned intsigned int)或兼容类型(如 _Bool)。
  • 位宽:指定成员占用的位数(1~32,取决于类型长度)。

2. 示例

// 定义一个状态寄存器的位字段
struct StatusRegister {unsigned int error_flag : 1;// 1位:错误标志(0/1)unsigned int mode : 3;// 3位:模式(0~7)unsigned int reserved : 4;// 4位:保留位unsigned int value : 8;// 8位:数值(0~255)
};

三、位字段的内存布局

1. 存储单元分配

  • 编译器将位字段按 存储单元(Storage Unit) 分组,通常为 int 大小(32位或64位)。
  • 当多个位字段总位数不超过存储单元时,连续存放;否则开启新存储单元。

2. 内存对齐示例

struct Example {unsigned int a : 4;// 占用4位unsigned int b : 5;// 再占5位(同一存储单元)unsigned int c : 20;// 总位数超过32,开启新存储单元
};
// 总大小:4 + 5 + 20 = 29位 → 需要2个int(32位系统下占8字节)

小端存储:低位数据保存到低地址空间

struct S {unsigned char bit0 : 1;unsigned char bit1 : 1;unsigned char bit2 : 1;unsigned char bit3 : 1;unsigned char bit4 : 1;unsigned char bit5 : 1;unsigned char bit6 : 1;unsigned char bit7 : 1;//bit不能进行取地址操作
};
int main()
{struct S *p = NULL;unsigned char num = 0x12; //0001 0010p = (struct S *)#/*0      0      0      1      0      0      1      0bit7   bit6   bit5   bit4   bit3   bit2   bit1   bit0*/ 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sql Server 多层嵌套事务的执行结果

在标准的事务模型中,嵌套的内部事务的“提交”在外层事务失败时是无效的。所有操作,包括内部事务的操作,都将被回滚。数据库事务处理的核心概念:在标准的事务模型中,嵌套的内部事务的“提交”在外层事务失败时是无…

深入解析:数据库入门实战版

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

es入门

es的概念 Es,全称ElasticSearch,是一个开源的分布式搜索引擎,底层基于 Lucene 实现。 es和传统db数据库的对应关系传统Db ElasticSearch数据库(database) 索引(index)表(tables) 类型(types)行(rows) 文档(documents…

YOLO进阶提升 1YOLOv2 改进

进阶提升 1YOLOv2 改进 核心概念YOLOv2:YOLO 的第二代版本,重点提升检测精度,同时保持实时速度。 Darknet-19:YOLOv2 使用的主干网络,由 19 层卷积层组成,借鉴 VGG 小卷积核设计。 Anchor Boxes(先验框):通过…

C# Avalonia 15- Animation- AnimationPlayerTest

C# Avalonia 15- Animation- AnimationPlayerTest自己实现一个AnimationPlayer类 AnimationPlayer类public partial class AnimationPlayer : ObservableObject{private readonly DispatcherTimer timer;private DateT…

Windows电脑快捷键

Windows电脑快捷键tab 用于切换菜单,以及在编写文本时空四个格子 功能键shift 控制键Ctrl win键 用于打开菜单 组合ctrl+shift=切换输入法 ctrl+shift+esc=打开任务管理器 alt+fn+f4=撤销当前窗口 Ctrl+C=复制 ctrl+S…

基于Python+Vue开发的体育场馆预约管理系统源码+运行步骤

项目简介该项目是基于Python+Vue开发的体育场馆预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习…

JSONArray集合根据某个字段查询对象

JSONArray list = new JSONArray(); JSONObject json1 = new JSONObject(); json1.put("code","10086"); json1.put("name","张三"); list.add(json1); JSONObject json2 = n…

详细介绍:Parasoft C/C++test 针对嵌入式开发的内存错误检测解决方案

详细介绍:Parasoft C/C++test 针对嵌入式开发的内存错误检测解决方案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…

[WC2006] 水管局长

显然,这道题需要维护一棵最小生成树,支持动态删边,查询链上最大值。查询链上最大值可以倍增维护,但是本题 \(n\) 较小,直接暴力往上跳也是可过的。 接下来就是如何动态维护最小生成树的问题了。对于一般图的最小生…

02-Media-7-uvc.py 应用软件解码的USB摄像头(UVC)捕获视频并显示的程序

02-Media-7-uvc.py 应用软件解码的USB摄像头(UVC)捕获视频并显示的程序pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

YOLO入门理解 3YOLOv1 思路与细节

入门理解 YOLOv1 思路与细节 核心概念YOLOv1:第一个提出端到端单阶段目标检测的模型,将检测任务转化为回归问题。 网格划分 (SS):输入图像被划分为固定网格,每个网格负责预测落在其中心的物体。 候选框 (Bounding…

完整教程:Qt开发经验 --- qmake执行系统命令(15)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

YOLO入门理解 评估指标

入门理解 评估指标 核心概念IoU(Intersection over Union):预测框与真实框的交并比,用来衡量检测结果是否准确。 Precision(精度):正确预测为正例的比例(TP / (TP + FP))。 Recall(召回率 / 查全率):实际…

清除win+r“运行”对话框中的历史记录

方法一:通过“文件夹选项”清除 按下 Win + R键打开“运行”对话框。 输入 control folders后回车,打开“文件夹选项”(Win 10+版本为“文件资源管理器选项”)。在“常规”选项卡下,找到“隐私”部分。 点击“清除…

[ICPC 2024 Yokohama R] Peculiar Protocol

我们约定:\(f_{l,r}\) 表示 \([l,r]\) 最多可以进行的操作次数(不一定要全部消掉)。 \(s_{l,r}\) 表示 \([l,r]\) 的 \(a\) 的和。考虑 \(f\) 应该怎么求解,根据区间 DP 的套路我们枚举中间点: \[f_{i,j}=\max\li…

YOLO入门理解 基础概念

核心概念YOLO(You Only Look Once):一种基于单阶段(one-stage)的目标检测框架,直接通过 CNN 回归得到检测框框与类别,特点是速度快、适合实时检测。 One-Stage 与 Two-Stage 检测:One-Stage:直接通过网络输出…

The 2025 ICPC Asia East Continent Online Contest (II)(C,D,E,H,I)

C. Jiaxun! C思路 首先来了解一下 \(Hall\) 定理,对于二分图 \(G<X+Y, M>\) ( \(X\) 表示左边点集,\(Y\) 表示右边点集,\(M\) 表示边集),令 \(W\) 表示 \(X\) 的子集, \(N(W)\) 表示 \(W\) 邻居的点集,则…

深入解析:不同上位开发语言、PLC下位平台、工业协议与操作系统平台下的数据类型通用性与差异性详解

深入解析:不同上位开发语言、PLC下位平台、工业协议与操作系统平台下的数据类型通用性与差异性详解2025-09-20 11:09 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal …

2022年十大Web黑客技术提名开启

本文宣布2022年十大Web黑客技术提名正式开始,旨在收集社区对最具创新性和可复用性的Web安全研究技术的提名,涵盖HTTP请求走私、缓存投毒、WAF绕过等前沿攻击手法。2022年十大Web黑客技术 - 提名开启 James Kettle 研…