news 2026/6/24 10:50:58

简单理解:清零为什么多此一举加取反

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单理解:清零为什么多此一举加取反

一、先说结论:不是多此一举,是 C 语言寄存器操作的经典编码习惯

tmpReg &= ~0xFFFF0000等价于tmpReg = tmpReg & 0x0000FFFF

明明可以直接写& 0x0000FFFF,很多工程师偏爱用& ~掩码写法,主要三个原因:

1. 语义直观:你要清零哪几位,就写哪几位的掩码

需求:我要清零高 16 位

  • 高 16 位:0xFFFF,低 16 位:0x0000→ 掩码写0xFFFF0000
  • ~取反后,要清零的位变成 0,要保留的位变成 1

读代码一眼就能看懂:~0xFFFF0000→ 把0xFFFF0000标记的这些位清零。

如果直接写0x0000FFFF: 你得在脑子里反向换算一遍:哪几位是 1、哪几位用来保留,可读性差。

举个例子

要清零 bit3、bit5:

reg &= ~((1<<3)|(1<<5));

一眼看出:把 bit3、bit5 清零。 如果手动算掩码写成reg & 0xFFFFFFD7,谁能一眼看懂清了哪几位?

2. 统一编码规范:位操作三种标准写法,格式统一

  1. 置 1 某几位:reg |= 掩码
  2. 清零某几位:reg &= ~掩码
  3. 翻转某几位:reg ^= 掩码

规则统一: 掩码永远写需要操作的位为 1

  • 置 1:哪些位要设 1,掩码哪些位写 1
  • 清零:哪些位要清 0,掩码哪些位写 1,然后取反

如果清零不用~,就要手动写反向掩码,三种操作写法逻辑不一致,容易写错。

3. 避免手算出错,减少低级错误

比如要清除 bit8~bit15 共 8 位:

  • 方式 1(取反写法):掩码直接写0x00FF00reg &= ~0x00FF00
  • 方式 2(直接掩码):需要自己算出0xFF00FF,很容易算错十六进制

位越多、分散位越多,手动算反向掩码越容易出错,用~可以直接按照操作目标写掩码,不用反向计算。

二、两种写法效果完全一样

  • tmpReg &= ~0xFFFF0000;
  • tmpReg &= 0x0000FFFF;

机器执行结果一模一样,没有性能差异,只是人为可读性、编码规范层面的写法选择。

三、补充:什么时候直接写正向掩码?

只有连续低位保留、简单场景才会直接写0x0000FFFF; 但凡零散位、中间几段位清零,一律用& ~掩码

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 10:49:29

日采亿级数据的分布式爬虫架构设计

一、引言在大数据时代&#xff0c;数据已成为企业核心资产。随着互联网规模的指数级增长&#xff0c;日均采集亿级网页数据已成为搜索引擎、电商比价、舆情监控、市场研究等行业的标配需求。传统单机爬虫受限于 CPU、带宽和内存资源&#xff0c;QPS 难以突破 1000 大关&#xf…

作者头像 李华
网站建设 2026/6/24 10:48:03

QMCDecode:专业解析QQ音乐加密格式转换的技术方案

QMCDecode&#xff1a;专业解析QQ音乐加密格式转换的技术方案 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认转换结…

作者头像 李华
网站建设 2026/6/24 10:47:22

计算机毕业设计之高校校园二手商品交易网站的设计与实现

本文论述了高校校园二手商品交易网站的设计和实现&#xff0c;该网站从实际运用的角度出发&#xff0c;运用了计算机网站设计、数据库等相关知识&#xff0c;基于系统管理和Mysql数据库设计来实现的&#xff0c;网站主要包括会员注册、会员登录、查看商品信息、校园公告等功能&…

作者头像 李华
网站建设 2026/6/24 10:42:18

计算机毕业设计之jsp基于Java+SSM的基金问答系统

本文介绍了一款使用SSM和JSP开发的基金问答系统&#xff0c;及其设计与实现过程。根据软件工程对软件系统开发定制的规则和标准&#xff0c;详细的介绍了系统的分析与设计过程&#xff0c;并且详细的概括了系统的开发与测试过程。本文的管理系统使用了java进行系统的后端开发&a…

作者头像 李华
网站建设 2026/6/24 10:36:24

DashScope Embedding工具类详解(向量转换、Milvus知识库项目实战)

一、为什么需要Embedding&#xff1f; 在知识库项目中&#xff0c;Milvus 并不能直接存储和检索文本内容&#xff0c;而是需要先将文本转换成向量&#xff08;Vector&#xff09;。 例如&#xff1a;新能源汽车动力电池电机控制系统经过 Embedding 模型处理后&#xff1a; [0.1…

作者头像 李华