F1.利用

import java.util.*;
public class Solution {
    public int NumberOf1(int n) {
    	//定义计数变量
        int count = 0;
        //循环
        while (n != 0){
            //由于1的前31位都为0,最后一位为1,和n这个数字做与运算可以判断n的最后一位是0还是1,如果为1就计数
            count += n&1;
            //每次判断完之后,n无符号右移一位,(注意不能为有符号右移,有符号右移高位补1,会造成死循环)
            n >>>= 1;
        }
        return count;
    }
}

F2.为了避免右移操作时不注意使用了有符号右移的操作;

import java.util.*;
public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        for (int i = 0; i < 32; i++) {
            count += n&1;
            n >>= 1;
        }
        return count;
    }
}

F3.使用java自带的api

import java.util.*;
public class Solution {
    public int NumberOf1(int n) {
       return Integer.bitCount(n);
    }
}