给定一个整数,求它的二进制表示中有多少个1。

利用位运算,使用n与n-1的按位与,其结果恰好去掉了n最低位的1,所以可以得到一个时间只与1的数量有关的算法。

 

  1. int countOne(int n) 
  2.  { 
  3.      int count=0; 
  4.      while(n!=0) 
  5.      { 
  6.          n&=n-1; 
  7.          count++; 
  8.      } 
  9.      return count; 
  10.  }