public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int num= scanner.nextInt();
int count=0;
for (int i = 0; i < 32; i++) {
if((num>>i)!=0){
count++;
}
}
System.out.println(count);
}
这里因为输入数num只需要右移32次,所以不需要无符号右移。
方法二:
这里只需要设置一个while函数条件设置为让num右移直至num=0。
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int num= scanner.nextInt();
int count=0;
while(num!=0){
if((num&1)==1){
count++;
}
num=num>>>1;
}
System.out.println(count);
}
这里要考虑负数的情况,所以必须要用无符号整形。
方法三:
在这里我们发现,只要让输入数和输入数-1相与,输入数会减1并且数中1的数量也会少1.
所以就的出了以下代码:
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int num= scanner.nextInt();
int count=0;
while(num!=0){
num=num&(num-1);
count++;
}
System.out.println(count);
}