查找2进制中1的个数
程序员文章站
2024-03-15 16:07:06
...
这个题目有很多种解法,我们可以一一列举出来
第一种
分析:在32位的二进制中,给出一个1001010的一连串的数,我们就可以联想到与 1& 得出想要的结果。
移动可分为两种,可以将二进制数向右移动,或者将1向左移动
向右移动时&出来的得数要和1向右的得数相等就证明有1。
Scanner sc=new Scanner(System.in);
int s=sc.nextInt();
//转换为二进制
System.out.println(Integer.toBinaryString(s));
int count=0;
for(int i=0;i<32;i++){
if((s&(1<<i))==(1<<i)){
count++;
}
}
System.out.println(count);
还有一个是将1向做移动
Scanner sc=new Scanner(System.in);
int s=sc.nextInt();
//转换为二进制
System.out.println(Integer.toBinaryString(s));
int count=0;
for(int i=0;i<32;i++){
if((1&(s>>i))==1){
count++;
}
}
System.out.println(count);
第二种方法
逐个减一
Scanner sc=new Scanner(System.in);
int s=sc.nextInt();
//转换为二进制
count=0;
while(s!=0){
//或者使用
//v &= (v-1);
s=((s-1)&s);
count++;
}
System.out.println(count);
}
第三个方法
一个二进制除以一个2,原来的数字就会减去一个0,如果有余数那么当前位置就为1。
static int count(int s1){
int num=0;
while(s1!=0){
if(s1 % 2 ==1){
num++;
}
s1=s1/2;
}
return num;
}
还有查表法,还有分支操作等等,感兴趣可以自己去查找。
希望大家能看的懂,不懂可以问我很乐意为你们服务。
下一篇: Java 经典排序算法