位运算在python中适用于性能敏感、底层控制及特定算法场景,可高效管理状态标志、加速2的幂次乘除取模、简化位级操作(如交换变量、统计1的个数)、支持硬件/协议交互。

位运算在Python中虽不如算术或逻辑运算常用,但在性能敏感、底层控制或特定算法场景下不可替代。它直接操作整数的二进制表示,速度快、内存省,且能简洁表达某些逻辑关系。
高效开关与状态管理(Flag标志位)
用单个整数的每一位代表一个布尔状态,比用列表或字典节省空间,也比多次if判断更高效。常见于权限系统、配置选项、游戏状态标记等。
- 定义常量时用2的幂:READ = 1
- 组合多个状态用|(按位或):flags = READ | WRITE
- 判断是否启用某状态用&(按位与):if flags & READ: ...
- 关闭某状态用& ~(与取反):flags & ~WRITE
快速乘除与取模(2的幂次限定)
当操作数是2的整数次幂时,位移可替代乘除,避免浮点误差和函数调用开销,尤其适合嵌入式、高频计算或编译器优化场景。
- x 5
- x >> n 等价于 x // (2**n)(向下取整),如 17 >> 2 → 4
- x & (n-1) 可替代 x % n(仅当n是2的幂且x≥0),如 23 & 7 → 23 % 8
位级技巧与算法加速
一些经典问题用位运算实现更简练、更高效,例如交换变量、判断奇偶、统计1的个数、查找唯一元素等。
立即学习“Python免费学习笔记(深入)”;
- 不借助临时变量交换a、b:a ^= b; b ^= a; a ^= b
- 判断奇偶:x & 1 == 1 → 奇数;== 0 → 偶数(比x % 2更快)
- 清除最低位的1(用于统计1的个数):n & (n - 1),如 12(1100)→ 8(1000)
- 异或特性解题:数组中除一个数外其余均出现两次 → 全部异或结果即为该数(a ^ a = 0, a ^ 0 = a)
与硬件/协议/压缩交互的底层处理
读写二进制文件、解析网络包头、操作GPIO、实现简易哈希或CRC校验时,常需按位提取、拼接或翻转字段。
- 从字节流中提取3位字段:(byte & 0b11100000) >> 5
- 将多个小字段打包成字节:(flag1
- 反转字节中位序(如某些通信协议要求):int(f'{x:08b}'[::-1], 2)










