求二进制数中1的个数

求二进制数中1的个数

相信大家都做过给一个十进制的整数n,然后判断这个整数有多少位,最后将每位的数字输出。利用了整型数据除法的特点。通过相除判断余数的值来分析。
而二进制也可以考虑利用整型数据除法的特点,只是除的是2而不是10,在此就只提供思路而不写代码。
本次主要介绍的是使用位操作来进行的。
我们知道,向右移位操作同样可以达到相除的目的。唯一不同之处在于,移位后如何判断是否有1存在。那我们进要进行与1的操作来判断最后一位是0还是1。

int countbits1(unsigned char ch)
{
	int count = 0;
	while (ch!=0)
	{
		if((ch&1)!=0)
		{
			count++;
		}
		ch>>=1;
	}
	return count;
} 

为了简化这个问题,我们考虑只有一个1的情况。例如:01000000。
若要判断二进制还总有一个1,可以判断这个数是否是2的整数次幂来实现。但如何之和这一个“1”进行判断呢?
若希望操作后的结果为0,01000000可以和00111111进行与操作。
这样,要进行的操作是01000000&(01000000-0000001)=01000000&00111111=0.

int GetBits2(unsigned char ch)
{
	int count = 0;
	while(ch != 0)
	{
		count++;
		ch &= (ch-1);//丢弃二进制最右边的1
	}
	return count;
}

猜你喜欢

转载自blog.csdn.net/wangjiaxin_/article/details/88875111
今日推荐