- 参考来源:Matrix67
基本位运算
| 运算符 | 说明 | 演示 |
|---|---|---|
| << | 左移 n n n位相当于 × 2 n \times 2^n ×2n | 5 << 3 == 5 * np.power(2, 3) |
| >> | 右移 n n n位相当于 × 1 2 n \times \frac{1}{2^n} ×2n1 | 128 >> 3 == 128 / np.power(2, 3) |
| & | and:同真为真,否则为假 | 5 & 9 == 1 |
| | | or:一真即真 | 5 | 9 == 13 |
| ^ | xor:同假异真 | 5 ^ 9 == 12 |
| ~ | no | ~5 == -6 |
技巧应用
- Matrix67基础
- 判断奇偶性
x & 1 - 去掉最后一位(二进制少一位)
x >> 1 - 在最后加一个0
x << 1 - 在最后加一个1
(x << 1) + 1 - 把最后一位变成1
x | 1 - 把最后一位变成0
(x | 1) - 1 - 最后一位取反
x ^ 1 - 把右数第k位(从1开始)变成1
x | (1 << (k - 1)) - 把右数第k位变成0
x & ~ (1 << (k - 1)) - 右数第k位取反
x ^ (1 << (k - 1)) - 取末k位
x & ((1 << k) - 1) - 取右数第k位
x >> (k - 1) & 1 - 把末k位变成1
x | (1 << k - 1) <==> x | (1 << (k - 1)) - 末k位取反
x ^ (1 << k - 1) - 把右边连续的1变成0
x & (x + 1) - 把右起第一个0变成1
x | (x + 1) - 把右边连续的0变成1
x | (x - 1) - 取右边连续的1
x ^ (x - 1) - 去掉右起第一个1的左边
x & (x ^ (x - 1))
- 判断奇偶性
- Matrix67进阶篇(1)
- Matrix67进阶篇(2)
- Matrix67实战篇
- 二进制枚举子集:从5个求中抽取任意0-5个求,枚举全部的情况:
- 组合 combinations
- 二进制表示: 0 = 00000 0 =00000 0=00000表示全部未抽中, 31 = 11111 = 2 5 − 1 31 =11111 = 2^5 - 1 31=11111=25−1表示全部抽中,则全部情况为 [ 0 , 31 ] [0, 31] [0,31]
- 技巧
- 找出数组中没有重复的数字:相同的数字 异或xor运算后为 0 0 0
from functools import reduce reduce(lambda x, y: x^y, t)
本文深入探讨了位运算的基本概念及其实用技巧,包括如何使用位运算进行数据操作,如判断奇偶性、改变特定位的状态等。此外,还介绍了如何利用位运算优化算法,如快速计算和枚举子集。文章通过实例演示了位运算在实际编程中的高效应用。
2282

被折叠的 条评论
为什么被折叠?



