1. 程式人生 > >C語言求一個整數的二進位制形式表示中1的個數,用函式實現

C語言求一個整數的二進位制形式表示中1的個數,用函式實現

1:我們知道,整數在計算機中是以補碼的形式儲存的。如果給定一個十進位制正整數是          如何轉換成二進位制數的呢?用的是除以2取餘數的方法。若餘數為1,則1的個數加          1;然後用商再除以2取餘數,直到商為0;但是負數除2的餘數為負數。因此,可以        在用          unsigned int 定義一個整數,將有符號數轉換成無符號數。例如-1的補碼        為11111111  11111111   11111111    11111111。用unsigned定義11111111   11111111          11111111   11111111表示的不再是-1,而是2^32-1。但這不影響1的個數。

      具體程式碼如下:

#include <stdio.h>

int count_one_bits(unsigned int value)
{
	int count = 0;
	while (value)
	{
		if (1 == value%2)
		{
			count++;
		}
		value = value/2;
	}
	return count;
}

int main()
{
	int input;
	int c = 0;
	scanf("%d", &input);
        c = count_one_bits(input);
	printf("數的二進位制表示中1的個數為:%d\n", c);
	return 0;
}

2:1的二進位制位00000000  00000000  00000000  00000001,a&1則可判斷的最低位          是0還是1,同樣需要使用unsigned。每進行一次按位與運算,還要將a右移一位。

#include <stdio.h>

int count_one_bits(unsigned int value)
{
	int count = 0;
	while (value)
	{
		if ((value&1) == 1)
		{
			count++;
		}
		value = value>>1;
	}
	return count;
}

int main()
{
	int input;
	int c = 0;
	scanf("%d", &input);
        c = count_one_bits(input);
	printf("數的二進位制表示中1的個數為:%d\n", c);
	return 0;
}

  

3:

#include <stdio.h>

int count_one_bits(int value)
{
	int count = 0;
	while (value)
	{
		count++;
		value = value&(value-1);
	}
	return count;
}

int main()
{
	int input;
	int c = 0;
	scanf("%d", &input);
        c = count_one_bits(input);
	printf("數的二進位制表示中1的個數為:%d\n", c);
	return 0;
}