C语言编程中布尔设置位掩码示例

在C语言编程中,当你想使用整数(通常是unsigned int或uint8_t, uint16_t, uint32_t等)的位来存储多个布尔设置时,你会使用位掩码。每个设置对应于整数中的一个位,你可以通过位操作(如按位与&、按位或|、按位异或^、按位取反~、左移<<和右移>>)来读取或修改这些设置。

下面是一个示例,展示了如何为settings.flag中的布尔设置定义位标志掩码:


#include <stdint.h> // 包含stdint.h头文件以使用固定宽度的整数类型  // 定义一个结构体来存储设置  
typedef struct {  uint8_t flag; // 使用8位无符号整数来存储标志  
} Settings;  // 定义位标志掩码  
#define SETTING_A_MASK (1 << 0) // 设置A的掩码,对应于flag的第0位  
#define SETTING_B_MASK (1 << 1) // 设置B的掩码,对应于flag的第1位  
#define SETTING_C_MASK (1 << 2) // 设置C的掩码,对应于flag的第2位  
// ... 可以继续定义更多的设置  // 函数来设置或清除特定的标志  
void setSetting(Settings *settings, uint8_t mask, int value) {  if (value) {  settings->flag |= mask; // 如果value为真,则设置标志  } else {  settings->flag &= ~mask; // 如果value为假,则清除标志  }  
}  // 函数来检查特定的标志是否被设置  
int isSettingSet(Settings *settings, uint8_t mask) {  return (settings->flag & mask) != 0; // 如果与运算的结果不为0,则标志被设置  
}  int main() {  Settings mySettings = {0}; // 初始化设置,所有标志都未设置  // 设置设置A  setSetting(&mySettings, SETTING_A_MASK, 1);  // 检查设置A是否被设置  if (isSettingSet(&mySettings, SETTING_A_MASK)) {  printf("Setting A is set.\n");  }  // 清除设置B(尽管它之前未被设置,但此操作无害)  setSetting(&mySettings, SETTING_B_MASK, 0);  // ... 其他操作  return 0;  
}

在这个示例中,我们定义了一个Settings结构体,它包含一个uint8_t类型的flag成员,用于存储标志。然后,我们为每个设置定义了一个位掩码,这些掩码用于通过位操作来读取或修改相应的标志。我们还提供了setSetting和isSettingSet函数来设置和检查标志。

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

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

相关文章

Rust:用 Warp 库实现 Restful API 的简单示例

直接上代码&#xff1a; 1、源文件 Cargo.toml [package] name "xcalc" version "0.1.0" edition "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies] warp "…

uniap之微信公众号支付

近来用uniapp开发H5的时候&#xff0c;需要接入支付&#xff0c;原来都是基于后端框架来做的&#xff0c;所以可谓是一路坑中过&#xff0c;今天整理下大致流程分享给大家。 先封装util.js&#xff0c;便于后面调用 const isWechat function(){return String(navigator.userA…

队列的实现(使用C语言)

完整代码链接&#xff1a;DataStructure: 基本数据结构的实现。 (gitee.com) 目录 一、队列的概念&#xff1a; 二、队列的实现&#xff1a; 使用链表实现队列&#xff1a; 1.结构体设计&#xff1a; 2.初始化&#xff1a; 3.销毁&#xff1a; 4.入队&#xff1a; 5.…

OC foudation框架(下)的学习

OCfoudation框架&#xff08;下&#xff09; 前面学习了有关OCfoudation框架的部分内容&#xff0c;我们现在对于后面的内容继续学习。 文章目录 OCfoudation框架&#xff08;下&#xff09;数组&#xff08;NSArray和NSMutableArray&#xff09;对集合元素整体调用方法排序使用…

会赚钱的人都在做这件事:你了解吗?

在我们日常生活的点滴中&#xff0c;以及在各种场合的交互中&#xff0c;利他思维始终扮演着不可或缺的角色。当我们追求合作与共赢时&#xff0c;单方面的自我立场显然是不够的&#xff0c;真正的关键在于换位思考&#xff0c;寻找并满足对方的需求。 互利互赢的核心理念正是利…

设置docker容器时区

设置docker容器时区 查看当前系统时间 1.1 查看当前系统版本 cat /etc/issue1.2 查看当前系统时间 date查看镜像默认时间 2.1 alpine镜像 sudo docker run -it --rm alpine date2.2 ubuntu镜像 sudo docker run -it --rm ubuntu date2.3 centos镜像 sudo docker run -it --rm …

虚拟知识付费系统源码推荐,在线教育双十一怎么做活动?

又是一年光棍节&#xff0c;啊不是&#xff0c;剁手节。小伙伴们早就摩拳擦掌准备剁手了&#xff0c;这个时候&#xff0c;几乎所有线上平台都行动起来了&#xff0c;而在线教育行业也没有闲着。如今&#xff0c;双十一已经成为了各大在线教育公司用来变现的一个大杀器&#xf…

ruoyi-vue-pro 使用记录(4)

ruoyi-vue-pro 使用记录&#xff08;4&#xff09; CRM数据库线索客户商机合同回款产品其他 CRM 文档 主要分为 6 个核心模块&#xff1a;线索、客户、商机、合同、回款、产品。 线索管理以 crm_clue 作为核心表客户管理以 crm_customer 作为核心表商机管理以 crm_business 作…

JavaScript数组(Array)方法 - toReversed、toSorted、toSpliced

最近发现几个数组方法&#xff0c;是一些常规方法的升级版&#xff0c;比较有意思&#xff0c;分享给大家 文章目录 一、温故二、知新toReversedtoSortedtoSpliced 一、温故 我们先来回顾几个比较常用的方法&#xff1a;reverse&#xff0c;sort&#xff0c;splice众所周知&a…

luceda ipkiss教程 69:导出器件或者线路的三维模型

ipkiss 3.12版加入write_obj函数&#xff0c;可以直接输出器件的三维模型。 如&#xff0c;输出自定义的mmi的三维模型&#xff1a; 代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3class MMI1x2(i3.PCell):"""MMI with …

kaldi学习参考

HMM模型 https://www.cnblogs.com/baixf-xyz/p/16777438.htmlhttps://www.cnblogs.com/baixf-xyz/p/16777438.htmlGMM-HMM 基于GMM-HMM的语音识别系统https://www.cnblogs.com/baixf-xyz/p/16777439.html https://www.cnblogs.com/baixf-xyz/p/16777426.htmlhttps://www.cnbl…

全栈开发之路——前端篇(6)生命周期和自定义hooks

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 第五篇 : 组件…

码一点网站

Linux命令查询网站 https://www.lzltool.com/LinuxCommand/Index 小林 x 图解计算机基础 https://xiaolincoding.com/ 代码随想录 https://programmercarl.com/ 可用于爬虫 https://books.toscrape.com/ 数据结构可视化 https://www.cs.usfca.edu/~galles/visualization/ …

fastText-文本分类

fastText介绍 fastText是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点: 1、fastText在保持高精度的情况下加快了训练速度和测试速度 2、fastText不需要预训练好的词向量,fastText会自己训练词向量 3、fastText两个重要的优化:Hierarchical Softmax、N-gr…

387.字符串中的第一个唯一字符

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

YUV中Y颜色模型的采样

YUV的特点 相对于表示颜色的GUI&#xff0c; YUI将亮度&#xff08;用Y表示&#xff09;与色调&#xff08;用U和V表示&#xff09;分开来表示。又因为人类视网膜上的视网膜杆细胞要多于视网膜锥细 胞&#xff0c;说得通俗一些&#xff0c;视网膜杆细胞的作用就是识别亮度&…

LabVIEW MEMS电容式压力传感器测试系统

LabVIEW MEMS电容式压力传感器测试系统 随着微电子技术的发展&#xff0c;MEMS&#xff08;微电机系统&#xff09;技术在各个领域得到了广泛应用。MEMS电容式压力传感器以其高灵敏度、小尺寸、低功耗等优点&#xff0c;在微传感器领域占据了重要的地位。然而&#xff0c;这些…

Smma-net:一种基于音频线索的目标说话人提取网络,具有谱图匹配和相互关注功能

SMMA-NET: AN AUDIO CLUE-BASED TARGET SPEAKER EXTRACTION NETWORK WITH SPECTROGRAM MATCHING AND MUTUAL ATTENTION 第二章 目标说话人提取之《Smma-net:一种基于音频线索的目标说话人提取网络&#xff0c;具有谱图匹配和相互关注功能》 文章目录 SMMA-NET: AN AUDIO CLUE-…

程序员的多维智慧:技术修炼、人际交往与投资哲学

程序员不应该只会埋头敲代码&#xff0c;要多看看书&#xff0c;多学习... 1.程序员技术 保持严谨的作风&#xff0c;实事求是&#xff0c;记录现象&#xff0c;找准依据&#xff0c;可以做出假设&#xff0c;问题的解释和结论必须能完整、全面符合现象和各种认知逻辑。 绝不…

【算法入门赛】B. 自助店评分(C++、STL、推荐学习)题解与代码

比赛地址&#xff1a;https://www.starrycoding.com/contest/8 题目描述 在上一场的入门教育赛中&#xff0c;牢 e e e找到了所有自助店的位置&#xff0c;但是他想发现一些“高分好店”&#xff0c;于是他利用爬虫技术从“小众点评APP”中爬取了武汉所有自助店的评分。 评分…