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

2021-06-16 19:20:38 字數 1342 閱讀 9311

方法一:判斷整數二進位制表示中最右邊一位是否為1,接著把整數右移一位判斷倒數第二位是否為1,以此類推,直到整數變成0為止。

**:

#include "stdafx.h"

#include using namespace std;

int countof1(int n)

n = n >> 1;

} return ncount;

}int _tmain(int argc, _tchar* argv)

缺點:如果輸入的數為負數,若一直做右移運算,最終將陷入死迴圈

方法二:為避免陷入死迴圈,可以不右移輸入的數字,先將輸入數字和1做與運算,判斷最低位是否為1,接著將1左移一位,判斷倒數第二位是否為1,以此類推。

**:

#include "stdafx.h"

#include using namespace std;

int countof1(int n)

flag = flag << 1;

} return ncount;

}int _tmain(int argc, _tchar* argv)

缺點:迴圈次數等於整數二進位制的位數,32為的整數需要迴圈32次。

方法三:把整數減去1,在和原整數做與運算,會把整數最右邊的乙個1變成0,那麼乙個整數的二進位制表示中有多少個1,就可進行多少次這樣的操作。顯然可以減少迴圈次數。

**:

#include "stdafx.h"

#include using namespace std;

int countof1(int n)

return ncount;

}int _tmain(int argc, _tchar* argv)

面試題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做與...

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

此題考查的是對位運算的掌握,題目不是很難,但一些細節問題還是需要注意的。方法1 移位 我們把這個數和0x1相與,如果結果為0,則表明該數的最後移位為0,否則為1。然後將這個數右移1位在此判斷,迴圈32次。如下 int numberof1 int n n 1 return count 以上我們採用了右...