面试题15:二进制中1的个数

  • 题目:
    • 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。 例如:把9表示成二进制是1001,有2位是1.因此如果输入9,则该函数输出2。

  • 思路:
    • 一个整数减去1,在和原数进行&运算,会把该整数最右边的1变成0。那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。
    • 例如:12的二进制为1100,1100-1=1011,1011&1100=1000; 这样,原1100中最右边的1变为了0;

/**
 * @Author GJ1e
 * @Create 2019/11/9
 * @Time 21:13
 *
 */
public class Solution15 {

    public static int numberOf1(int n){
        int count = 0;
        while (n>0){
            count++;
            n = (n-1)&n; //能进行多少次就有多少个1
        }
        return count;
    }

}