Linux C语言 29-位域

news/2025/1/8 8:21:11/

Linux C语言 29-位域

本节关键字:C语言 位域 位运算
相关C库函数:

什么是位域?

C 语言的位域(bit-field)是一种特殊的结构体成员,允许我们按位对成员进行定义,指定其占用的位数。

位域的作用

在实际项目中,使用位域最大的优点就是节约内存空间。其次,使用位域后可以减少位运算(位移、与、或)。

位域的使用

#include <stdio.h>// 假如我们定义了一个开关集合,每个开关只能出现0和1两个值
typedef struct 
{char s_0;char s_1;char s_2;char s_3;char s_4;char s_5;char s_6;char s_7;
} byte1_t;typedef struct
{char s_0:1;char s_1:1;char s_2:1;char s_3:1;char s_4:1;char s_5:1;char s_6:1;char s_7:1;
} byte2_t;int main(void)
{char value = 1;byte1_t b1;byte2_t b2;char *p = NULL;int i;printf("========= byte1_t: \n");p = (char*)&b1;for (i=0; i<8; i++){if (i % 2 == 0)*(p+i) = 1;else*(p+i) = 0;}for (i=0; i<8; i++)printf("s_%d=%d\n", i+1, *(p+i));printf("\n\n\n========= byte2_t: \n");p = (char*)&b2;for (i=0; i<8; i++){if (i % 2 == 0)*p |= (1<<i);else*p &=~ (1<<i);}for (i=0; i<8; i++)printf("s_%d=%d\n", i, *p>>i & 1);printf("\n\n");printf("=========byte1_t size: %d\n", sizeof(byte1_t));printf("=========byte2_t size: %d\n", sizeof(byte2_t));return 0;
}/** 运行结果:
========= byte1_t:
s_1=1
s_2=0
s_3=1
s_4=0
s_5=1
s_6=0
s_7=1
s_8=0
========= byte2_t:
s_0=1
s_1=0
s_2=1
s_3=0
s_4=1
s_5=0
s_6=1
s_7=0
=========byte1_t size: 8
=========byte2_t size: 1
*/

http://www.ppmy.cn/news/1243984.html

相关文章

开发者天堂:免费API接口大集合,助你轻松打造应用

企业工商三要素核验 API&#xff1a;通过输入企业名称、法人、注册号 /组织机构代码 /统一社会信用代码&#xff0c;验证三者是否匹配一致。企业工商四要素核验&#xff1a;传入企业名称、社会统一信用代码、法人名称、法人身份证&#xff0c;校验此四项是否一致。实名认证&…

机器学习ROC曲线中的阈值thresholds

在ROC&#xff08;Receiver Operating Characteristic&#xff09;曲线中&#xff0c;阈值&#xff08;thresholds&#xff09;是一个用于分类模型的概率或分数的截断值。ROC曲线的绘制涉及使用不同的阈值来计算真正例率&#xff08;True Positive Rate&#xff0c;TPR&#xf…

N7 LUP.2.3 DRC如何解决?

这个问题在Design Rule中的介绍如下图&#xff1a; 解决办法是od 15 um的范围要加LUP_GR* cell&#xff0c;需要提高密度(加的位置需要符合tcic)去fix。

ShardingSphere-JDBC 入门教程(v4.1.1)

框架介绍 ShardingSphere-JDBC 定位为轻量级 Java 框架&#xff0c;在 Java 的 JDBC 层提供的额外服务。它使用客户端直连数据库&#xff0c;以 jar 包形式提供服务&#xff0c;无需额外部署和依赖&#xff0c;可理解为增强版的 JDBC 驱动&#xff0c;完全兼容 JDBC 和各种 OR…

UniApp 中的 u-input 属性讲解

在 UniApp 中&#xff0c;u-input 是一个常用的组件&#xff0c;用于接收用户的输入。它具有多种属性&#xff0c;用于控制输入框的样式和行为。下面我将为您讲解一些常用的 u-input 属性。 基本属性 value&#xff1a;表示输入框的初始值&#xff0c;可以使用 v-model 进行双…

基于C#实现块状链表

在数据结构的世界里&#xff0c;我们会认识各种各样的数据结构&#xff0c;每一种数据结构都能解决相应领域的问题&#xff0c;当然每个数据结构&#xff0c;有他的优点&#xff0c;必然就有它的缺点&#xff0c;那么如何创造一种数据结构来将某两种数据结构进行扬长避短&#…

windows版本的grafana如何离线安装插件

本文以安装clickhouse的插件为例&#xff0c;记录下如何离线安装插件 1 下载插件 ClickHouse plugin for Grafana | Grafana Labs 2 找到grafana的配置文件 打开编辑&#xff0c;搜索plugin关键字&#xff0c;修改plugin的加载目录 目录不存在&#xff0c;手动创建&#xff0…

2024 IEEE Fellow名单公布,上百位华人学者入选!

就在近日&#xff0c;美国电子电气工程师学会&#xff08;Institute of Electrical and Electronic Engineers&#xff0c;IEEE&#xff09;公布了新一届Fellow名单。 IEEE Fellow为学会最高等级会员&#xff0c;是IEEE授予成员的最高荣誉&#xff0c;旨在表彰那些在电气、电子…