利用位运算加速计算
整除2与模2
x: int = 123
# 整除2:
x = x>>1
# 模2:
x = x&1
x&(x−1) (Brian Kernighan 算法)
对于任意整数x: int
,令 x = x&(x−1)
,该运算将x
的二进制表示的最后一个1变成0.
用处:
- 计算整数的二进制表示中有多少个1
x&(-x)
-x的运算对应的二进制操作是: 所有位置取反+1
对于x: int
, x&(-x)
的作用是得到x
的二进制表示中最低位的1及其后面的0. 比如, 如果x=12
,那么它的二进制表示是00001100
,那么x&(-x)
就是00000100
.
用处:
- 判断整数数是否为2的幂
- 计算整数数的最大的2的幂的因数