如何得出一個數二進制形式的 1 的個數
思考兩個問題:
1 . 二進制形式中 1 的個數,需要把十進制轉換成二進制麼 ?
根本沒必要,數據在計算機中就是以二進制形式存儲的,只是我們看到的是十進制而已,我操作十進制實際上就是在操作相應存儲空間的二進制位數據。
2. 如何確定二進制形式中 1 的個數 ?
方法 1 . 移位操作:對數據進行右移操作,把移動後的結果和 0x1 按位相與操作,如果結果是 1 ,則該數的最低位是1 ,這樣確定了一個 1 啦 ,以此類推。
方法 2 . 自身按位與:自身和自身減一相與,當 自身變爲0 是,結束循環。
如何實現:
C++實現
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
int count = 0;
int m = 9999;
while( m )
{
if(m & 1) count++;
m >>= 1;
}
/*
while( m )
{
count++;
m = m & (m - 1);
}
*/
cout << count <<endl;
return 0;
}
結果是:
8
總結:
涉及到二進制級別的操作,移位,異或,與,或,非操作是首選的操作方法。