1. 程式人生 > >如何判斷一個數二進位制中“1”的個數

如何判斷一個數二進位制中“1”的個數

在這裡我們以數字“7”為例(數字“7”的二進位制為“111”,有三個“1”),提供兩種方法來判斷一個數中二進位制中“1”的 個數!

1.使用移位操作符(右移操作)

    讓二進位制的每一位&(邏輯與)1,如果得到的結果為數字“1”,則二進位制數該位有一個“1”。

#include<stdio.h>
int main()
{
	int num = 7;
	int count = 0;
	while (num)
	{
		if (num & 1 == 1)
		{
			count++;
		}
		num = num >> 1;
	}
	printf("num中1的個數有:%d", count);
	return 0;
}

2.巧妙運用數字之間的關係(最高效演算法)

    讓我們要計算的數與該數減一的 進行&運算,當計算結果為0時,程式結束。

    例如,讓7(111)&6(110)得到的是6(110),接著6(110)&5(101)得到4(100),接著4(100)&3(011)得到0(000),程式結束,       得到的結果就是有3個“1”。

#include<stdio.h>
int main()
{
	int num = 7;
	int count = 0;
	while (num)
	{
		num = num&(num - 1);
		count++;
	}
	printf("num中1的個數:%d\n", count);
	return 0;
}
上述兩個程式碼的結果都是一樣的,執行結果如下:


像這樣的問題都是一些比較簡單的演算法,有時程式碼看起來很容易,但讓自己去想,可能一時半會想不到,這就需要我們多去看書,多去總結和積累!