#include <stdio.h>
int NumberOf1(int n)
{
int count = 0;
while(n)
{
count++;
n = (n-1) & n;
}
return count;
}
int NumberOf1_Solution2(int n)
{
int count = 0;
unsigned int flag = 1;
while(flag)
{
if(n&flag)
count++;
flag = flag<<1;
}
return count;
}
//=======測試示例======
void Test(int number, unsigned int expected)
{
int actual = NumberOf1(number);
if(actual == expected)
printf("Solution1: Test for %p passed.\n", number);
else
printf("Solution1: Test for %p failed\n", number);
actual = NumberOf1_Solution2(number);
if(actual == expected)
printf("Solution2: Test for %p passed.\n", number);
else
printf("Solution2: Test for %p failed\n", number);
}
int main(void)
{
// 輸入0,期待的輸出是0
Test(0, 0);
// 輸入1,期待的輸出是1
Test(1, 1);
// 輸入10,期待的輸出是2
Test(10, 2);
// 輸入0x7FFFFFFF,期待的輸出是31
Test(0x7FFFFFFF, 31);
// 輸入0xFFFFFFFF(負數),期待的輸出是32
Test(0xFFFFFFFF, 32);
// 輸入0x80000000(負數),期待的輸出是1
Test(0x80000000, 1);
return 0;
}
結果:
QQ截圖20160626201117.png
相關:
判斷一個整數是不是2的整數次方
把這個整數減去1之后再和它自己做與運算,這個整數中唯一的1就會變成0輸入兩個整數m和n,計算需要改變m的二進制表示中的多少位才能得到n
第一步求這兩個數的異或;第二步統計異或結果中1的個數