小方法n与n-1相与,相当于把n的最右侧的1变为0
1统计二进制中1的个数
class Solution(object):
# 正数时
def hammingWeight(self, n):
"""
:type n: int
:rtype: int
"""
count = 0
while n>0:
count += (n & 1)
n = n >> 1
return count
# 可能是负数时,1左移n不动
def hammingWeight_2(self, n):
"""
:type n: int
:rtype: int
"""
count = 0
flag = 1
while flag:
count += (n & 1)
flag = flag << 1
return count
Solution().hammingWeight(6)
def hammingWeight3( n):
"""
:type n: int
:rtype: int
"""
s = 0
while n != 0:
s += 1
# n & (n-1)相当于把最右边以为变为0
n = n & (n-1)
return s
print(hammingWeight3(4))
2 判断是不是2的整数次方
【解法】2的整数次方中有且只有一个1,与该数的减去1相与后全部为0
def function(num):
if num & (num-1) == 0:
return num
else:
return False
for x in range(100):
res = function(x)
# print(res)
3需要改变多少位从m变到n
【解法】先进行异或,然后统计异或中1的个数
def function(m,n):
xor = m^n
res = 0
while xor:
res += 1
xor = xor & (xor-1)
return res
function(8,13)
4位运算判断奇偶数
n&1 == 1 就是奇数
否则为偶数.
【结论】二进制的最后一位如果是0 就是偶数,是1就是奇数
【原因】因为二进制除了最后一位,其他位都是2的幂次方,必然是为偶数的,那么我们可以通过最后一位为0或者1来判断
通过和1做与运算可以求出最后一位与1运算的结果来判断奇偶