求二進位制中“1”的個數
阿新 • • 發佈:2018-12-30
題目描述:對於一個位元組(8位)的無符號整型變數,二進位制表示中“1”的個數,要求演算法的執行效率儘可能高。
- 方法一
思路:首先比較好的方法是想到對二進位制數進行 >>和&,這樣就可以逐步求出序列中“1”的個數.(注:1&1=1, 1&0=0, 0&0=0)
int Count(int num)
{
int count = 0;
while (num)
{
count += (num & 0x01 );
num >>= 1;
}
return count;
}
- 方法二
思路:對於一個二進位制數,第一次除以2,原來數會減少一個0,如果有餘,那麼表示當前位置有個1。
例如:1010 0010
第一次除以2,商1010001,餘數0;
第二次除以2,商101000 ,餘數1。
int Count(int num)
{
int count = 0;
while (num)
{
if (num % 2 == 1)
count++;
num /= 2; //同num >>= 1;
}
return count;
}
- 方法三
思路:位操作效率比除、餘操作高,第三種也是一種巧妙方法。
int Count(int num)
{
int count = 0;
while (num)
{
num &= (num - 1);
count++;
}
return count;
}
- 測試程式碼
int main()
{
int i = 9;
int N = 0;
N = Count(i);
printf("%d\n", N);
return 0;
}