求一個數的二進位制數中所含1的個數的程式碼實現

期待一片自己的藍天發表於2014-06-03
#include<stdio.h>

int numberOf1_solution1(int n)/*將一個正數以此向右移一位,與1做與運算,直到這個數為零*/
{
	int count = 0;
	while (n)
	{
		if (n&1)
			count++;
		n=n >> 1;
	}
	return count;
}

int numberOf1_solution2(int n)/*將1以此向右移動以為,與一個數(正負數均可)做與運算,直到1出現上溢為止*/
{
	int count = 0, i = 1;
	while (i)
	{
		if (n&i)
			count++;
		i = i << 1;
	}
	return count;
}

int numberOf1_solution3(int n)/*將一個數減去1後再與本身相與,便可減少一個1,利用這個原理求1的個數*/
{
	int count = 0;
	while (n)
	{
		n = (n - 1)&n;
		count++;
	}
	return count;
}

int main()
{
	printf("%d\n",numberOf1_solution3(5));
	return 0;
}

相關文章