二进制中1的个数

题目:实现一个函数,输入一个整数,输出该数二进制表示中1的个数
思路1:循环移位,看最后一位是否为1。

int nof1(unsigned int num)  // 使用unsigned int,就可以处理负数
{
	int count = 0;
	while(num)
	{
		count += num & 0x1u;          //判断最后一位是否为1
		num >>= 1;
	}
	return count;
}

思路2:使用n-1将最右边那个值为1的bit变为0。使用 n = n & (n-1)。 适合值为1的bit比较稀疏的情况。

int nof1(int n)
{
	int count = 0;
	while(n)
	{
		count++;
		n = n & (n-1);          //将最右边那个值为1的bit变为0
	}
	return count;
}

相关题目:
1、写一条语句判断一个整数是不是2的整数次方  (思路:只有一位是1,减1后与自身做与运算)
2、计算两个整数的二进制表示中,不同位的个数 (思路:异或后,统计异或结果中1的位数)
 

Leave a Reply

Your email address will not be published. Required fields are marked *