java实现输出二进制中1的个数 四种解法

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);
		
	}
}
发布了24 篇原创文章 · 获赞 10 · 访问量 1296

猜你喜欢

转载自blog.csdn.net/qq_41625102/article/details/104399473