1. 程式人生 > >計算二進位制整數中的1 的個數

計算二進位制整數中的1 的個數

如果要計算一個整數的二進位制數中共有幾個1,最容易想到的方法就是下面這個方法:
    while (num)
    {
        if (num % 2 == 1)
            count++;
        num = num / 2;
    }
    printf("二進位制中1的個數 = %d\n", count);

但是,如果要計算一個負數呢?這個方法是行不通的。例如負數-1,-1除以2得到的餘數並不是1 ,所以得到的結果就是0,但他的二進位制數其實是有一個1的,這就產生了錯誤。

 

下面這個程式碼就比較好,既可以計算正整數的二進位制數中1的個數,也可以計算負數的二進位制數中1的個數。

 

用到了右移操作符,需要注意的是一定要迴圈32次,因為變數num是一個整型變數,佔四個位元組,32位。

 

每右移一位,最左邊會補0,再與1進行按位與操作後就是0,而最右邊的位就是我們要判斷是不是1的那一位:

如果是1,與1按位與操作後還是1,count就加1;

如果不是1,按位與操作後,就變成0,與1按位與操作後是0,count不會變化。

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int num = -1;
	int count = 0;//計數
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if (((num >> i) & 1) == 1)
			count++;
	}
	printf("二進位制中1的個數 = %d\n", count);
     system("pause");
     return 0;
}