202.结构体之位域
位域 :
有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。位段成员必须声明为int、unsigned int或signed int类型(short char long)。
示例:
#include <stdio.h>
#include <stdint.h>
#include <string.h>struct bit {uint8_t mode:4;uint8_t submode:4;uint8_t data[12];void show(){printf("size:%d mode:%d submode:%d \n", sizeof(struct bit), mode, submode);int i = 0;for(i = 0; i < 12; i++){printf("%d ", data[i]);}putchar(10);}
};int main()
{int i = 0;char buf[13] = {};printf("Hello world\n");struct bit _mbit;_mbit.mode = 10;_mbit.submode = 4;for(i = 0; i < 12; i++){_mbit.data[i] = 1;}_mbit.show();memcpy(buf, (uint8_t *)&_mbit, sizeof(_mbit));for(int i = 0; i < 13; i++){printf("%x ", buf[i]);}putchar(10);printf("h4:%x l4:%x \n", buf[0]&0xf0, buf[0]&0x0f);return 0;
}
小端平台运行结果:
高4位为4, 低4位为a
202.结构体之位域相关推荐
- 结构体之位域全面分析
结构体的定义 typedef struct TEST {... }Test,*pTest;struct TEST {... }test 这里的test是一个TEST变量.. 结构体之位域 有些信息在存 ...
- (转)C结构体之位域(位段)
转载自C结构体之位域(位段) 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简 ...
- C结构体之位域(位段)
C结构体之位域(位段) 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C ...
- 结构体之位域(位段)
结构体之位域(位段) 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语 ...
- 结构体 + 联合体 + 位域 使用
简单介绍结构体 定义结构体,一般是对有相同属性的元素或成员的归纳,比如电机的电气特性:驱动电压.驱动电流.运行速度:还有比如系统报警类:过压报警.过流报警.欠压报警 本人常用格式 typedef s ...
- C语言中结构体的位域(bit-fields)
有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可.例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位.正是基于这种考虑,C语言又提供了一种叫做位域 ...
- C 语言编程 — 高级数据类型 — 结构体与位域
目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...
- C++工作笔记-对结构体中位域的补坑说明
以前关于位域的连接: https://blog.csdn.net/qq78442761/article/details/80102666 对这篇博文进行补坑说明: 如下: structbs { int ...
- gcc中的结构体成员位域
1=============================================== struct test { int m: 1; //此字段使用一位 }; sizeof(struct ...
最新文章
- C语言的基础题目,几个c语言的基础题目
- 抓取网络文件的URL地址作附件发送
- C#委托与事件 简明
- Hadoop:HDFS NameNode内存全景
- 简明python教程txt-Python:将 list 写入一个 txt 文件四种方法
- 如何编写YARN应用程序
- 【MM模块】Taxes / Terms of Payment 税额和付款条件简介
- Node.js 启动调试方式
- python调用ping命令_在Python中调用Ping命令,批量IP的方法
- jquery on()方法和bind()方法的区别
- 内联函数 error LNK2001: unresolved external symbol
- IOS9 微信sdk升级指南
- R语言聚类算法之期望最大化聚类(Expectation Maximization Algorithm)
- 【人民币识别】基于matlab GUI形态学钞票面额识别与统计【含Matlab源码 906期】
- 龙芯2k1000-pmon(5)- pmon无法修改环境变量的问题
- GUI 尚学堂马士兵视频上留的作业,自己改出来的
- OPENCV LOMO效果
- 【历史上的今天】9 月 20 日:中国正式接触互联网;抖音上线;中科大成立
- destoon参考大全
- 国产积木---克尔维特(多图流量预警)
热门文章
- python的隐藏功能分享_【图片】分享一段功能非常简陋的python代码实现下载free种【pt吧】_百度贴吧...
- mysql zerofill设置方法_在MySQL中使用ZEROFILL设置自定义自动增量
- jquery 父元素相邻元素_Jquery中几种查找节点的方法
- mysql5.7空间运算_msyql5.7数据类型和运算符
- Python“文件操作”Excel篇(上)
- java int数组任何数之间间隔不能对于指定数,内付极速排序
- Visual Studio 安装OpenCV及问题总结
- 【计算机网络】物理层设备功能浅析
- 修改一个CGRect的值
- Java关键字介绍之this与super