- 参考来源: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基础
- 判断奇偶性复制代码1
2x & 1
- 去掉最后一位(二进制少一位)复制代码1
2x >> 1
- 在最后加一个0复制代码1
2x << 1
- 在最后加一个1复制代码1
2(x << 1) + 1
- 把最后一位变成1复制代码1
2x | 1
- 把最后一位变成0复制代码1
2(x | 1) - 1
- 最后一位取反复制代码1
2x ^ 1
- 把右数第k位(从1开始)变成1复制代码1
2x | (1 << (k - 1))
- 把右数第k位变成0复制代码1
2x & ~ (1 << (k - 1))
- 右数第k位取反复制代码1
2x ^ (1 << (k - 1))
- 取末k位复制代码1
2x & ((1 << k) - 1)
- 取右数第k位复制代码1
2x >> (k - 1) & 1
- 把末k位变成1复制代码1
2x | (1 << k - 1) <==> x | (1 << (k - 1))
- 末k位取反复制代码1
2x ^ (1 << k - 1)
- 把右边连续的1变成0复制代码1
2x & (x + 1)
- 把右起第一个0变成1复制代码1
2x | (x + 1)
- 把右边连续的0变成1复制代码1
2x | (x - 1)
- 取右边连续的1复制代码1
2x ^ (x - 1)
- 去掉右起第一个1的左边复制代码1
2x & (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
复制代码1
2
3
4from functools import reduce reduce(lambda x, y: x^y, t)
最后
以上就是标致大山最近收集整理的关于[集锦]Python位运算的全部内容,更多相关[集锦]Python位运算内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复