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;
}


      

        

發佈了29 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章