常用的位运算操作:
n的二进制表示中第k位数字是几?
① 先把第k位移动到最后一位:n>>k
② 看个位是几n&1
比如:输出n的每一位:
n=10
for k in range(4,0,-1):
print(n>>k&1)
n>>k&&1
负数的二进制:-x=~x+1
lowbit操作:x&-x 作用是只保留二进制的最后一个1 即 01011000通过lowbit操作之后就变成了1000
通过原数字减去lowbit既可以去掉二进制最后位置的1。
例子:统计x二进制中1的个数:
方法一:使用lowbit:
def lowbit(x):
return x&-x
res=0
while x:
x-=lowbit(x)#每次都减去最后面出现的1
res+=1
print(res)
方法二:n&(n-1)技巧 n&(n-1)相当于去除了原数字最后位置的1
res=0
while x:
x=x&x-1#每次都去掉最后位置的1
res+=1
print(res)