0的个数也是同样的思路~
说是四种解法实际上是3种~
public class OneCount {
public static void main(String[] args) {
/*
* 大思路
* 1)扫描二进制数
* 2)判断是不是1
*
* 针对第二步:有三种方法判断是不是1
* 1 左移二进制的1,和二进制的每一位做与运算。判断是不是1
* 2 将二进制数的每一位依次右移至最低位,和1做与运算,判断是不是1
* 3 不再用位运算的思想,而是直接将二进制的每一位都放到数组中,
* 转而判断数组中1的个数(不推荐,太麻烦了)
*
* 第四种方法则是消去1,消了多少个1,就有多少个1
* 消去:给这个二进制数减一
* 减一的结果:每减一次一就会将二进制数中最低位的1变为0,
* 其余(最低位1到最低位之间)的所有0变为1
* 显然,要扫描整个二进制数,只减一次1是不够的
* 所以,每减一次一,都要和自己做一次与运算(将所有的1都变为0)
* */
Scanner sc=new Scanner(System.in);
int number=sc.nextInt();
System.out.println("您输入数字的二进制形式为"+Integer.toBinaryString(number));
int count=0;
//方法一和二
for(int i=0;i<32;i++)
if(((1<<i)&number)==1<<i)
count++;
System.out.println(count);
count=0;
for(int i=0;i<32;i++)
if(((number>>i)&1)==1)
count++;
System.out.println(count);
//方法四
count=0;
while(number!=0)
{
number=(number-1)&number;
count++;
}
System.out.println(count);
}
}