方法一

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long x=in.nextLong();
        int sum=0;
        while(x>0){
            sum+=x%2;
            x=x/2;

        }
        System.out.println(sum);
    }
       
       
}

优化,使用位运行

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long x=in.nextLong();
        int sum=0;
        while(x>0){
            sum+=x&1;
            x=x>>1;

        }
        System.out.println(sum);
    }
       
       
}

方法二 Brian Kernighan 算法

import java.util.Scanner;
//Brian Kernighan 算法
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long x=in.nextLong();
        int sum=0;
        while(x>0){
            x&=x-1;//将x二进制表示中最右边的那个 1(即最低位的 1)置为 0
            sum++;

        }
        System.out.println(sum);
    }
       
       
}

方法三 使用API

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long x=in.nextLong();
       
        System.out.println(Long.bitCount(x));
    }
       
       
}