C++位运算高效用于底层控制与优化,包括按位与(&)提取/清零位、按位或(|)置位、异或(^)翻转/交换/加密、取反(~)和右移(>>)生成掩码或除法;需注意类型符号性、优先级及移位越界。

C++ 的位运算直接操作整数的二进制位,效率高、常用于底层控制、状态标记、加密和优化场景。掌握它们的关键是理解每个运算符的逻辑规则和典型用法。
按位与(&):提取或清零特定位
对两个操作数的对应位做“与”运算:都为 1 才得 1,否则为 0。常用作“掩码提取”或“清零”。
- 判断某位是否为 1:例如 if (x & 0x04) 检查 x 的第 3 位(从 0 开始)是否置位
- 清零某些位:例如 x &= ~0x0F 清掉低 4 位(~0x0F 是 0xFFFFFFF0)
- 保留特定字段:如取一个字节的高 4 位:(byte & 0xF0) >> 4
按位或(|):设置特定位
对应位只要有一个为 1 就得 1。主要用于“置位”——打开某个标志位。
- 开启标志:例如 flags |= 0x02 把 flags 的第 2 位设为 1(不影响其他位)
- 组合多个标志:如 OPT_VERBOSE | OPT_DEBUG | OPT_LOG(前提是各宏定义为互不重叠的 2 的幂)
按位异或(^):翻转或比较
相同为 0,不同为 1。特点是自反性:a ^ a == 0,a ^ 0 == a。
一套面向小企业用户的企业网站程序!功能简单,操作简单。实现了小企业网站的很多实用的功能,如文章新闻模块、图片展示、产品列表以及小型的下载功能,还同时增加了邮件订阅等相应模块。公告,友情链接等这些通用功能本程序也同样都集成了!同时本程序引入了模块功能,只要在系统默认模板上创建模块,可以在任何一个语言环境(或任意风格)的适当位置进行使用!
立即学习“C++免费学习笔记(深入)”;
- 翻转特定位:例如 x ^= 0x01 切换 x 的最低位
- 交换两个整数(无需临时变量):a ^= b; b ^= a; a ^= b;
- 简单加密/校验:如对数据逐字节异或一个密钥值(仅适合教学或轻量场景)
按位取反(~)和右移(>>):补码取反与位移
~ 对整数每一位取反(注意:有符号数取反后是补码表示,结果为负值);>> 是算术右移(有符号数补符号位)或逻辑右移(无符号数补 0),取决于操作数类型。
- 生成掩码:例如 ~0U 得到低 n 位为 0、其余为 1 的掩码
- 快速除以 2 的幂:如 x >> 3 等价于 x / 8(对非负数成立)
- 注意陷阱:对负数右移行为依赖实现,应优先使用无符号类型处理位移
位运算本身不难,但容易出错的地方在于数据类型(尤其符号性)、优先级(& 和 | 优先级低于 == 和 !=,记得加括号)、以及移位位数是否越界(C++ 中移位位数必须小于类型宽度,否则未定义)。写的时候多用十六进制常量和 sizeof 验证,能少踩很多坑。








