10 二进制中1的个数

public class test243{
    //常规解法
    public static int findOnesOfBinary1(int n){
        int cnt = 0;
        int flag = 1;
        while(flag!=0){
            if((n&flag)!=0){
                cnt++;
            }
            flag=flag<<1;//此处不对n右移,而是对flag左移。因为n可能是负数,右移n要考虑符号问题。
        }
        return cnt;
    }
    //惊喜解法
    public static int findOnesOfBinary2(int n){
        int cnt = 0;
        while(n!=0){
            cnt++;
            n=n&(n-1);//这个操作每次将最右端的1变成0
        }
        return cnt;
    }
    public static void main(String[] args){
        System.out.println(findOnesOfBinary2(9));
    }
}
原文地址:https://www.cnblogs.com/seven7seven/p/3929988.html