2.3 逻辑运算(与 / 或 / 异或)的高效使用技巧
本章导读二进制的终极魔法 ——逻辑运算是程序员优化代码、解决面试题的 “神器”。这篇我们不讲理论只讲场景化实操用生活案例 代码示例带你掌握与 / 或 / 异或的核心窍门。一、逻辑运算的本质0 和 1 的 “规则游戏”逻辑运算只有三种与、或|、异或^规则如下运算符号规则A 和 B 为 0 或 1生活化比喻与全 1 才 1有 0 则 0串联电路两个开关都闭合灯才亮或||有 1 则 1全 0 才 0并联电路只要一个开关闭合灯就亮异或^相同为 0不同为 1翻硬币正反不同才有效二、零门槛实操逻辑运算代码示例a 0b1010 # 十进制10 b 0b1100 # 十进制12 # 与运算保留共同为1的位 print(bin(a b)) # 0b10008 # 或运算|保留至少一个为1的位 print(bin(a | b)) # 0b111014 # 异或运算^保留不同的位 print(bin(a ^ b)) # 0b01106三、场景案例逻辑运算的实战妙用1. 与运算掩码提取、判断奇偶提取特定位用掩码0b1111提取最后 4 位x 0b10101100 print(bin(x 0b1111)) # 0b1100提取最后4位判断奇偶x 1 1等价于x % 2 1速度更快def is_odd(x): return (x 1) 1 # 比x%2更高效2. 或运算|设置特定位、合并状态设置特定位为 1用掩码0b00010000把第 5 位设为 1x 0b10100000 print(bin(x | 0b00010000)) # 0b10110000合并状态比如权限管理读权限 | 写权限 读写权限3. 异或运算^交换变量、找唯一数面试高频交换两个变量不用临时变量a 5 b 3 a ^ b b ^ a a ^ b print(a, b) # 3 5找数组中唯一出现一次的数其他数都出现两次def find_single(nums): res 0 for num in nums: res ^ num return res # 示例[2,2,3,3,4] → 输出4四、进阶拓展位运算的高级技巧翻转特定位用异或^翻转某一位0 变 11 变 0x 0b1010 print(bin(x ^ 0b0100)) # 0b1110翻转第3位清零最低位的 1x (x - 1)常用于计算二进制中 1 的个数def count_ones(x): cnt 0 while x: x x - 1 cnt 1 return cnt获取最低位的 1x -x常用于树状数组、位图等数据结构五、常见问题排查❌ 误区 1“逻辑运算和条件判断的 /|| 一样”✅ 正解/||是逻辑短路运算只返回 True/False/|是位运算操作二进制位完全不同❌ 误区 2“异或运算没什么用只是面试题”✅ 正解异或运算在加密、校验、状态机中大量使用比如 RC4 加密、TCP 校验和都依赖异或。❌ 误区 3“位运算代码太晦涩可读性差”✅ 正解合理使用位运算可以提升性能关键是要加注释比如x (x - 1)要注明 “清零最低位的 1”。 本章总结这三篇笔记我们完整走完了「二进制基础 → 底层运算 → 实战技巧」的学习路径第一篇搞懂为什么用二进制建立底层认知第二篇掌握移位、补码、左右移理解计算机如何处理数据第三篇解锁逻辑运算实战技巧把二进制知识变成编程生产力从 “0 和 1 是什么” 到 “怎么用二进制优化代码”你已经完成了计算机底层基础的关键一步
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2431649.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!