当前位置: 首页 > article >正文

《C和指针》笔记3:置一和清零

在C语言中,移位运算符<<>>表示二进制数左移或右移,我们可以利用它们很轻松地对变量中单个位进行置一和清零。

我们可以规定变量二进制数最右边一位是第0位,定义bit_number是0,对应地,从最右边一位往左数第n位,对应的bit_number是n-1。

在这里插入图片描述
上图是举个例子,

置一

我们如果需要把bit_number对应的数变为1,可以这样写:

value |= 1 << bit_number;

等价于:

value = value | ( 1 << bit_number );

利用1 << bit_number将1移动到bit_number对应的位上。
比如1<<2;我们得到:

在这里插入图片描述
再和value中的值相或,value中除了bit_number对应的位上的数变为1,其他可以保持不变,原理是或的属性:

1|1=1
1|0=1
0|a=a (a=0或a=1)

在这里插入图片描述

清零

我们如果需要把bit_number对应的数变为0,可以这样写:

value &= ~ ( 1 << bit_number );

等价于:

value = value & ( ~ ( 1 << bit_number ) );

利用1 << bit_number将1移动到bit_number对应的位上,再取非,把位上的0变成1,1变成0。
比如~(1<<2);我们得到:

在这里插入图片描述

再和value中的值相与,value中除了bit_number对应的位上的数变为0,其他可以保持不变,原理是或的属性:

0&1=0
0&0=0
1&a=a (a=0或a=1)

在这里插入图片描述

摘录自:《C和指针》71


http://www.kler.cn/a/17537.html

相关文章:

  • 【学习】【HTML】HTML、XML、XHTML
  • DApp开发:定制化解决方案与源码部署的一站式指南
  • kafka消费数据太慢了,给优化下
  • Qt 获取当前系统中连接的所有USB设备的信息 libudev版
  • Matlab自学笔记四十一:介绍日期时间型的显示格式:年‘y‘ 月‘M‘ 日‘d‘ 周‘e‘ 时‘h‘ 分‘m‘ 秒‘s‘
  • 实战指南:理解 ThreadLocal 原理并用于Java 多线程上下文管理
  • 一种用于大坝水库边坡内部振弦式应变计组
  • 【CSS 知识总结】第七篇 - CSS 布局-居中布局-水平居中布局
  • 测试之路,2023年软件测试市场领域有哪些变化?突破走得更远...
  • 2023年全国最新安全员精选真题及答案65
  • 【MOMO】高水平期刊目录(持续更新)
  • 基于微服务架构的水果销售系统的设计与实现
  • springboot文件上传
  • arxiv2022 | MolT5:Translation between Molecules and Natural Language
  • encrypted勒索病毒攻击nas服务器,服务器中了勒索病毒解密数据恢复
  • Redis事务
  • zk之数据的发布与订阅
  • RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)RBF神经网络训练部分
  • 有趣的回文检测
  • 如何用ChatGPT做团队绩效管理?根据员工的个人优势、不足、目标来生成更具体的绩效反馈
  • 2023/5/7周报
  • 猫狗训练集训练报错:Failed to find data adapter that can handle input
  • C++ Primer第五版_第十五章习题答案(21~30)
  • Spring Boot 整合 Swagger 教程详解
  • ChatGPT写文章效果-ChatGPT写文章原创
  • leetcode 530. 二叉搜索树的最小绝对差