题目描述
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如:把9表示成二进制是1001,有两位是2,如果输入9.则输出2.
规律发现
注意:
判断该整数最右边是否为1的方法为:和1做位与运算
思路:将该整数减1,然后将结果和原来数进行与运算可以将最右边的1变为0,重复此过程,直到该数变为0,则结束循环,即可得count。
我们以12举例,我们将的二进制1100减去1 得到1011,将该数字和1100与操作之后得到1000,我们通过此方法可以快速去掉每一个二进制数字最左边的1.
代码展示
public class N10二进制中1的个数 {
//将该整数减1,然后将结果和原来的数进行与运算可以将最右边的1变为0,
//重复此过程,直到该数变为0,则结束循环,即可得count
public static int NumberOf1(int n){
int count = 0;
while(n != 0){
int n1 = n-1;
n = n & n1;
count++;
}
return count;
}
public static void main(String[] args) {
int n = 13;
System.out.println(NumberOf1(n));
}
}