有哪些学习bit shifting(位移位)的优质资源推荐?
位位移技能学习路径与实践指南
基础原理夯实
先把底层规则吃透,避免只会背套路不知道适用边界:
- 明确核心概念:整数的二进制表示规则、补码的运算逻辑、
<<(左移)、>>(算术右移)、>>>(逻辑右移)三类位移的底层行为,以及不同编程语言的实现差异(比如Java内置逻辑右移,C/C++中无符号数右移为逻辑右移,有符号数右移为算术右移) - 熟练基础常用场景:比如用
x << 1等价替代整数乘2、x >> 1等价替代正整数除2、用x & 1判断奇偶,先把这些高频简单操作练到形成肌肉记忆
通用实现模式拆解
位位移和你熟悉的map、fold、递归等概念一样,有固定的通用使用模式,按场景归类记忆即可快速建立直觉:
- 位提取模式:从整数中提取指定范围的位段,通用逻辑为
(目标数 >> 偏移量) & 对应长度的全1掩码,例如提取32位整数第3位到第7位的写法为(x >> 3) & ((1 << 5) - 1),逻辑和用filter提取列表子集完全一致:位移是把目标位段移动到最低位,掩码是过滤掉无需保留的高位 - 单位操作模式:对指定位置的位做原子修改,和修改映射中单个键值对的逻辑对应:
x | (1 << n)将第n位设为1,x & ~(1 << n)将第n位清为0,x ^ (1 << n)翻转第n位的值 - 位遍历模式:逐位遍历整数的所有位做处理,逻辑等价于遍历数组的fold操作,示例代码如下:
// 遍历32位整数的每一位 for (int i = 0; i < 32; i++) { int current_bit = (x >> i) & 1; // 自定义位处理逻辑 }
- 分治位操作模式:批量处理多位的复杂计算,比如快速统计二进制中1的个数、快速反转二进制位等,本质是用位移+位运算实现分治,和你写分治递归的思路完全一致:把长二进制位拆分为多个小段分别处理,再合并结果
落地练习方法
- 刷基础位运算专项算法题,优先做通用场景题,比如无需临时变量交换两个数、找出数组中只出现一次的数字、判断2的幂等,每做完一道就对应到上面的模式分类里,不要刻意钻研偏门炫技的黑魔法题
- 阅读生产级开源项目中的位运算实现,比如位图(BitMap)的增删改逻辑、网络协议的字段打包解析、哈希表的哈希值计算逻辑,这些都是工业界常用的实用场景
- 日常开发中有意识地用位运算替换等价的普通操作,比如用
x & ((1 << n) - 1)替代x % (1 << n)做2的幂次取模、把多个布尔状态打包到一个整数里存储,用的频率高了自然就能像思考其他常用编程概念一样快速拆解相关问题
内容的提问来源于stack exchange,提问作者lmonninger
相关产品推荐
相关产品推荐

