碰到遇到一个有趣的题,求一个数二进制的表示中1的个数,该题有两种解法,一种是使用短除法将该数直接转化为二进制数,另一种比较巧妙的算法是使用与运算,原理如下图所示

求一个数中1的个数

 

依照此种思入有如下算法

int NumberOf1_Solution3(int i)
{
      int count = 0;

      while (i>0)
      {
            ++ count;
            i = (i - 1) & i;
      }

      return count;
}

//依照短处法的思路 有如下实现

public static int getOneOfNum(int target) {
    StringBuilder stringBuilder = new StringBuilder();
    while (target != 0) {
        stringBuilder.append(target % 2);
        target = target / 2;
    }
    int count = 0;
    for (int i = 0; i < stringBuilder.length(); i++) {
        if ('1' == stringBuilder.charAt(i)) {
            count++;
        }
        ;
    }
    return count;
}

 

 

 

 

相关文章: