一、题目描述
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2.
二、java代码实现
public class Main {
public static void main(String[] args){
int n = 15;
System.out.println(numberOf1A(n));
System.out.println(numberOf1B(n));
System.out.println(numberOf1C(n));
}
//第一种方法:判断最右边一位是不是1,然后把输入的整数右移一位,循环的次数<=32
public static int numberOf1A(int n){
int count = 0;
while(n!=0){
if((n&1) !=0)
count++;
n = n >>> 1;//注意这里要用无符号右移,最高位补0,如果写成>>,当n为负数的时候会导致死循环
}
return count;
}
//第二种方法:设一个flag,循环的次数等于整数二进制的位数,32位的整数需要循环32次
public static int numberOf1B(int n){
int count = 0;
int flag = 1;
while(flag != 0){
if((n & flag) != 0)
count++;
flag = flag << 1;
}
return count;
}
//第三种方法:n&(n-1)会把最右边的1置为0,这个操作有多少次代表有多少个1,循环的次数是1的个数
public static int numberOf1C(int n){
int count = 0;
while(n!=0)
{
++ count;
n = n & (n-1);
}
return count;
}
}