描述
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
示例1
输入:
5
输出:
2
考察点:
1.“&” 按位与运算符:两个二进制数按位与,两位同时为“1”才为1,否则为“0”。那么一个数和 1“相与”,只有末尾“是“1”结果才是1,否则为0;
2.位移运算符:一个数>>1,向右移1位,相当于这个数除以2。
解题思路:
1) 把这个数和1“相与”,判断结果是否等于1,如果等于1,则说明这个数转换成二进制数后末位是1,则count++,计数器加1。
2) 把这个数向右移动1位。
3) 重复上面1、2步的动作,直到这个数等于0则终止。
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int count = 0;
while (a > 0){
if ((a & 1) == 1) {
count++;
}
a = a >> 1;
}
System.out.println(count);
}
}