题解
请实现一个函数,输入一个整数,输出该数二进制中1的个数。
延伸
用一条语句判断一个整数是不是2的整数次方。
思路
这里提供一种比较有趣的方法。我们可以尝试将num二进制中的每个1依次消去(即变为0),而后统计共执行了多少次消除操作。
首先明确两个性质:
1.整数减一后,其二进制最低位的1会变为0而其后的0全部变为1。(感兴趣的可以自行验证)
2.整数减一后,再与整数做与运算((num-1)&num)
即可实现消除二进制中最低位1的操作。
代码
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int count = 0;
while(num != 0){
num = ((num - 1) & num);
count++;
}
System.out.println(count);
}
}
下面是另外一种做法
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int count = 0;
for(int i = 0; i < 32; i ++){
if(check(num,i)){
count ++;
}
}
System.out.println(count);
}
private static boolean check(int num,int index){// index [0,31]
boolean flag;
int ans = 1;
ans = ans << index;
ans = num & ans;
ans = ans >> index;
if(ans == 1){
flag = true;
return flag;
}else{
flag = false;
return flag;
}
}
}