#-*- coding:utf-8 -*-
'''
description: 位与
面试题15: 二进制中1的个数
'''
class Solution:
'''
这种方法如果有负数会陷入死循坏
'''
def num_of_1(self, n):
count = 0
while n:
if n & 1:
count += 1
n >>= 1
return count
def num_of_1_2(self, n):
count = 0
flag = 1
while flag < n:
if flag & n:
count += 1
flag <<= 1
return count
'''
数与他减一的数相位于相当于去除二进制中最后一个1, 循坏的次数就相当于该数的二进制中有几个一
'''
def num_of_1_3(self, n):
count = 0
while n:
count += 1
n = n & (n - 1)
return count
s = Solution()
print(s.num_of_1(15))
print(s.num_of_1_2(15))
print(s.num_of_1_3(15))