求一個數的二進制中1的個數方法很多,在這裏我總結最近學到的兩種簡單好用的方法:
(1)簡單法:
由於右移運算符的特性,每向右移動一位,相當於二進制的最低位就被消除高位補零,其功能相當於該數每次除以2。
利用上述原理,每次讓二進制的最低位和1進行與運算.若該位是1,則記一次數.然後右移1位;繼續上述運算,直到爲零。
代碼實現:
int count (int n )
{
int i ;
for (i = 0; n ; )
{
if(n&1==1) i++;
n>>=1;
}
return i;
}
(2快速法:
之所以叫快速法,是因爲其在求解時並不關注二進制的位數,其的效率由該二進制中1的個數決定.即每次讓其最低位爲1的歸零,能進行多少次,說明該數的二進制表示中
就有多少個1.
代碼實現:
int count (int n )
{
int i ;
for (i = 0; n ; i++)
{
n&=(n-1);
}
return i;
}