题目描述: 给定一个数,求它转化为二进制中1的个数
- 方法一:将给定的数与1左移n(n<32)位按位与,结果为不为零,则当前位为1
- 方法二:与方法一类似,将给定的数右移n(n<32)位与1按位与,结果为不为零,则当前位为1
- 方法三:给定的数每次减一与自身按位与,加一,若结果不为零,则重复以上操作。
以下是具体的代码:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("enter a number:");
int n= in.nextInt();
int count = 0;
for(int i=0;i<32;++i){
if((n&(1<<i))==(1<<i)){
++count;
}
}
System.out.println(count);
count = 0;
for(int i = 0;i<32;++i){
if(((n>>i)&1)==1){
++count;
}
}
System.out.println(count);
count = 0;
while(n!=0){
n = (n-1)&n;
count++;
}
System.out.println(count);
}
}
github地址:https://github.com/lcl0512/algorithm-in-java.