二进制中1的个数
【题目】:
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。
如9的二进制为:1001,输出结果为2。
【解题思路】:
利用位移的思想,每次先与1进行与运算,再将该数右移一位;
先将该数字对2求余,再除以2,直到结果为0。
**Note:**位运算比除法效率要高
def number_func1(n):
count = 0
while n:
if n & 1:
count += 1
n = n >> 1
return count
def number_func2(n):
count = 0
while n:
if n % 2 != 0:
count += 1
n = n // 2
return count
# 这个方法非常巧妙,且效率很高,因为数字中有多少个1就会进行几次循环
def number_func3(n):
count = 0
while n:
count += 1
n = (n - 1) & n
return count
# test
n = 9
print("number_func1: ", number_func1(n))
print("number_func2: ", number_func2(n))
print("number_func3: ", number_func3(n))
运行结果: