# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第6章 基本数字运算 6.10 如何求二进制数中的1的个数
题目:
给定一个整数,输出这个整数的二进制表示中1的个数。例如:
给定整数7,其二进制表示为111,因此输出结果为3.
分析:
最简单的方式,暴力破解,将10进制数转换为2进制数,
然后遍历二进制数的每个比特位。
关键:
1 书上解法
每次n&(n-1)都会使得结果少一位1,而且是最后一位,
因为n与n-1最后一位肯定不同。
直到n&(n-1)的结果为0,记录期间的次数即为1的个数
2 没有想到
是因为忘记了n&(n-1)每次使得结果的最后1位少1个1。
参考:
Python程序员面试算法宝典
'''
def countOne(n):
count = 0
while n > 0:
if n != 0:
n = n & (n-1)
count += 1
return count
def process():
n = 7
result = countOne(n)
print result
if __name__ == "__main__":
process()