位运算小技巧总结
1. 奇偶性快速判断与反转
1 | // 判断奇偶性 |
2. 二进制位操作
1 | // (1) 取第k位(从0开始) |
3. 位遍历(判断当前位是 1 还是 0 )
1 | while(num) { // 当num不为0时循环 |
4. 快速计算二进制1的个数(__builtin_popcount)
1 | int cnt = __builtin_popcount(x); // GCC内置函数 |
5. 保留最低位的1(lowbit)
1 | int lowbit = x & -x; // 树状数组核心操作 |
6. 判断/寻找0位
1 | int t = 1ll; |
7. 判断是否为2的幂
1 | bool is_power_of_two = (x & (x - 1)) == 0; |
8. 位运算优先级口诀
1 | ~ > 算术运算 > << >> > & > ^ > | |
注意事项
- 位运算优先级容易出错,建议多用括号
- 右移时注意符号位(无符号用
>>,有符号用>>>) - 大数运算记得加
1LL防止溢出