判断一个二进制数字有多少个1----java实现

这个题目会有多个解法:

需要判断n的二进制有几个1

first:通过n向右移位&1,如果n的最后为1,那么与1结果为1,(相信大家都会与运算,hashmap就是用与运算)以此来实现,循环判断有多少个1,结束条件为n=0;

second:上述方法有一个缺陷,就是当n为有符号数字时,才用n==0的结束条件会发生死循环,那么我们可以通过移位1来实现,也就是有每次比较去把1向左移,一次来比较

 

 

 

前两种属于常规做法,下面来说一种技巧性的做法

比如:n=1001,每次将n-1,那么第一次就是1000,使用n&(n-1)→1001&1000=1000,这是第一次计算,第二次1000&0111=0

两次运算,而1001中有两个1;   如果看不懂的可以自己写写,感受下,就能体会了;

上代码:

public void showOne(int n){
		if(n==0){
			System.out.println("0");
			return;
		}
		int count=0;
		while(n!=0){
			count++;
			n=n&(n-1);
		}
		System.out.println(count);
	}

出处来自剑指offer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值