面試題10 二進位制中1個個數

2021-07-13 13:05:04 字數 700 閱讀 3270

1.題目:實現乙個函式,輸入乙個整數,輸出該整數二進位制中1 的個數,例如輸入7,7的二進位制位111,所以輸出3.

分析:傳統的方法:使用移位來實現,用數字1與該數字按位與運算,然後逐個向左移位,遍歷該數字的每一位,統計出1的個數,按位與的結果是1則證明該位是1,結果是0則證明是0。

另一種方法:先將該數字減一,產生的結果是最右邊的1變成0,左邊的位不受影響,然後將原數字與相減的結果做與預算,這樣可以減少不必要的遍歷的次數。

原始碼:

#includeusing namespace std;

//*****=1.最高效的方法*****====

int numofone(int n)

cout << "run for: " << count << " times" << endl;

return count;

}//*****=2.常規做法*****=

int numofone_2(int n)

flag = flag << 1;

}cout << "run for: " << times << " times" << endl;

return count;

}int main()

結果:

面試題10 二進位制中1的個數

方法一 判斷整數二進位制表示中最右邊一位是否為1,接著把整數右移一位判斷倒數第二位是否為1,以此類推,直到整數變成0為止。include stdafx.h include using namespace std int countof1 int n n n 1 return ncount int t...

面試題10 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。解法一 可能引起死迴圈 public int numberof1 int n return count 思路 如果乙個整數與1做與運算的結果是1,表示該整數...

面試題10 二進位制中1的個數

面試題10 特殊的情況是右移運算,m n。如果數字是乙個無符號數值,用0填補最左邊的n位。如果是有符號數值,用數字的符號位填補最左邊的n位。左移m 題目 實現乙個函式,輸入乙個整數,輸出該數中二進位制表示中1的個數。整數右移移位和除以2是等價的,但除法的效率比移位運算低得多。常規解法是 將n與1做與...