利用位运算符设置标志位

        在写程序的过程中,会碰到需要修改标志位的情况。比如需要设置一个文件标识符可读或可写,首先想到的是利用int变量(1表示不可读不可写 ,2表示不可读可写,3表示可读不可写,4表示可读可写)。但是这样不直观,比较难记。

        在计算机底层使用0、1存储,因此我们可以使用int变量进行位运算来设置标志位,比如如下依据1为是,0为否规定:

对于下面的代码示例:

enum FDevent
{TimeOut=0x01,          //001WriteAble=0x02,        //010ReadAble=0x04          //100
};int setWriteable(struct Channel *channel, bool flag)
{if(flag){channel->event |= WriteAble;}else{channel->event = channel->event & ~WriteAble;}return 0;
}

函数的目的是用来设置 struct Channel 结构体类型的 channel 对象的 event 成员的 WriteAble 标志位。

  1. 如果 flag 为真,即为 true,则执行下面代码:

    channel->event |= WriteAble;,这是一个按位或的运算符,将 channel->event 成员与 WriteAble 进行按位或操作,并将结果重新赋值给 channel->event。这实际上是将 channel->event 的 WriteAble 标志位置为 1。

  1. 如果 flag 为假,即为 false,则执行下面代码:

    channel->event = channel->event & ~WriteAble;,这里用到了按位与和按位取反的运算符。channel->event & ~WriteAble 表达式将 channel->event 的 WriteAble 标志位清零,然后将结果赋值给 channel->event

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

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

相关文章

Challenge 6 - OSCP C

156 开放了161端口,直接snmpbulkwalk扫描 snmpbulkwalk -c public -v2c 192.168.243.156 NET-SNMP-EXTEND-MIB::nsExtendObjects得到账号密码jack:3PUKsX98BMupBiCf 试了那几个web端口,发现可以登录8083的vesta,但是需要用户名大写Jack 接着登录之后里面可以创建计划任务…

【Spring Boot系列】快速上手 Spring Boot

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【Python】新手入门学习:详细介绍里氏替换原则(LSP)及其作用、代码示例

【Python】新手入门学习:详细介绍里氏替换原则(LSP)及其作用、代码示例 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyT…

4、设计模式之建造者模式(Builder)

一、什么是建造者模式 建造者模式是一种创建型设计模式,也叫生成器模式。 定义:封装一个复杂对象构造过程,并允许按步骤构造。 解释:就是将复杂对象的创建过程拆分成多个简单对象的创建过程,并将这些简单对象组合起来…

Spring揭秘:ClassPathScanningProvider接口应用场景及实现原理!

技术应用场景 ClassPathScanningCandidateComponentProvider是Spring框架中一个非常核心的类,它主要用于在类路径下扫描并发现带有特定注解的组件,支持诸如ComponentScan、Component、Service、Repository和Controller等注解的自动扫描和注册。 ClassP…

2024硬核对比内衣洗衣机:dailyneaty、希亦、觉飞大pk

内衣和贴身衣物的面料通常比较柔软和脆弱,如果和其他衣物混洗,可能会因摩擦和拉伸等原因导致面料损坏、变形或者开线,而内衣洗衣机可以采用低速旋转、柔和的清洗方式,避免这种情况的发生,因此,内衣洗衣机可…

C#,数值计算,希尔伯特矩阵(Hilbert Matrix)的算法与源代码

Hilbert, David (1862-1943) 1 希尔伯特(Hilbert) 德国数学家,在《几何学基础》中提出了第一套严格的几何公理(1899年)。他还证明了自己的系统是自洽的。他发明了一条简单的空间填充曲线,即埃里克魏斯汀的数学世界,即希尔伯特曲线,埃里克魏斯汀的数学世界,并证明了不…

Linux 建立链接(ln)

目录 1、ln命令 创建软链接: 创建硬链接: 2、输出重定向(>/>>) 3、管道(|) 1、ln命令 (英文全拼:link files)为某一个文件在另外一个位置建立一个同步的…

实践致知第9享:Word中标题编号无法正常编辑

一、背景需求 在编辑文档时,多级目录结构却无法正常编辑。 二、解决方案 1右键选择“项目符号和编号”查看是否上下文中的编号格式都保持一致,如下图所示。 2当调整到同一种样式之后,用格式刷刷一下需要编辑的标题,先刷成同级别…

自动化运维工具Ansible

目录 一.Ansible基本内容 1.定义 2.特点与优势 优势: (1)轻便性:无需在被控制服务器上安装客户端,Ansible基于ssh协议 (2)幂等性:大部分模块有幂等性,即如果输入sys…

【LeetCode热题100】24. 两两交换链表中的节点(链表)

一.题目要求 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 二.题目难度 中等 三.输入样例 示例 1: 输入&am…

武汉星起航:创新驱动,共赢未来,引领跨境电商新潮流

在跨境电商这个充满挑战与机遇的领域,武汉星起航凭借其创新思维和共赢理念,正引领着行业发展的新潮流。 武汉星起航深知创新是企业在激烈竞争中立于不败之地的关键。公司始终关注市场动态,紧跟行业趋势,不断探索新的商业模式和运…