题解1:
int的数值是三十二位,则用x&1来参与计数,每次循环1向左移一位
&的功能:按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
import java.util.Scanner;
public class 一题三解二进制中1的个数 {//这里的名字必须跟你自己定义的名字一样
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc =new Scanner(System.in);
int N=sc.nextInt();
//Integer.toString(int par1,int par2),par1表示要转成字符串的数字,par2表示要转成的进制表示
System.out.println(Integer.toString(N, 2));
int count =0;
for(int i=0;i<32;i++)
{
if((N&(1<<i))==(1<<i)) {//计算时,N是以二进制来参与运算的
count++;
}
}
System.out.println(count);
}
}
题解二:
x&1中,每次循环x向右移一位,1不移动
思路3:
计算N=((N-1)&N),知道N等于0,设置一个计数器count
import java.util.Scanner;
public class 一题三解二进制中1的个数 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc =new Scanner(System.in);
int N=sc.nextInt();
//Integer.toString(int par1,int par2),par1表示要转成字符串的数字,par2表示要转成的进制表示
System.out.println(Integer.toString(N, 2));
int count =0;
for(int i=0;i<32;i++)
{
if((N&(1<<i))==(1<<i)) {//计算时,N是以二进制来参与运算的
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);
}
}