问答题 5.  给定一个整数,输出这个整数的二进制表示中1的个数。例如:给定整数7,其二进制表示为111,因此输出结果为3。
【正确答案】方法一:移位法
   可以采用位操作来完成。具体思路如下:首先,判断这个数的最后一位是否为1,如果为1,那么计数器加1,然后,通过右移丢弃掉最后一位,循环执行该操作直到这个数等于0为止。在判断二进制表示的最后一位是否为1时,可以采用与运算来达到这个目的。具体实现代码如下:
   #判断n二进制码中1的个数
   def countOne(n):
   count=0 #用来计数
   while n>0:
   if(n&1)==1:#判断最后一位是否为1
   count+=1
   n>>1 #移位丢掉最后一位
   return count
   if __name__=="__main__":
   print countOne(7)
   print countOne(8)
   程序的运行结果为:
   3
   1
   算法性能分析:
   这种方法的时间复杂度为O(N),其中N代表二进制数的位数。
   方法二:与操作法
   给定一个数n,每进行一次n&(n-1)计算,其结果中都会少了一位1,而且是最后一位。例如,n=6,其对应的二进制表示为110,n-1=5,对应的二进制表示为101,n&(n-1)运算后的二进制表示为100,其效果就是去掉了110中最后一位1。可以通过不断地用n&(n-1)操作去掉n中最后一位1的方法求出n中1的个数,实现代码如下:
   def countOne(n):
   count=0 #用来计数
   while n>0:
   if n!=0: #判断最后一位是否为1
   n=n&(n-1)
   count+=1
   return count
   
   if __name__=="__main__":
   print countOne(7)
   print countOne(8)
   算法性能分析:
   这种方法的时间复杂度为O(m),其中m为二进制数中1的个数,显然当二进制数中1的个数比较少的时候,这种方法有更高的效率。
【答案解析】[考点] 如何求二进制数中1的个数