欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

查找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;
		}

还有查表法,还有分支操作等等,感兴趣可以自己去查找。
希望大家能看的懂,不懂可以问我很乐意为你们服务。