位运算能做什么?
位运算简单说就是直接操作二进制位0和1的运算。它是计算机最底层的母语因为 CPU 的算术逻辑单元ALU原生支持它所以位运算是计算机中执行速度最快的操作比加减乘除还要快。下面分三层进行讲解第一层位运算是什么6大运算符C 中有 6 种基本位运算符它们的本质是按二进制位进行的逻辑或移位操作 按位与两个都是 1结果才为 1|按位或 只要有一个是 1结果就为 1^ 按位异或 相同为0不同为1~按位取反0变11变0包括符号位左移 高位丢弃低位补0相当于 乘以2右移 低位丢弃高位补符号位相当于 除以2取整第二层位运算公式判断奇偶(x 1) 1 比 x % 2 效率高得多乘/除以 2 x 1 x 1 常用于二分查找、堆的索引计算清除最低位的 1 x (x - 1)判断 2 的幂结果为0br统计二进制中 1 的个数循环执行直到0获取最低位的 1将最低位 0 变 1 x \| (x 1)用于计算下一个拥有相同数量 1 的更大数交换两个数无临时变量 a ^ b; b ^ a; a ^ b;第三层位运算到底能干什么1. 极致性能优化算法题这是你最熟悉的场景。比如 HashMap 计算数组下标时不用 % 取模除法很慢而是用 hash (length - 1)前提 length 是 2 的幂。还有你刚做的判断 2 的幂、4 的幂都是利用二进制“只有一个 1”的规律2. 权限管理与状态压缩操作系统/游戏Linux 的文件权限rwx就是用 3 个 bit 位控制的。7 表示 111可读可写可执行。在算法 DP动态规划中状态压缩用二进制整数表示一个集合的状态比如 dp[mask]mask 的每一位代表某个元素是否被选中0未选1已选遍历子集用 for(sub mask; sub; sub (sub-1) mask)。3. 图形学与颜色处理前端/游戏开发一个 32 位的颜色值 0xAARRGGBBAlpha, Red, Green, Blue。要提取红色分量直接 (color 16) 0xFF要修改透明度直接 (color 0x00FFFFFF) | (alpha 24)比做乘除快无数倍。注意点优先级问题位运算的优先级非常低尤其比 低。错误写法if (n 1 0)编译器会解析为 n (10)永远为 0正确写法if ((n 1) 0) 一定要加括号