劍指Offer 面試題15 二進位制中1的個數

2021-10-02 23:06:16 字數 1022 閱讀 7171

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

題目:請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。

#include

#include

using

namespace std;

/** * 方法一:首先我們的想法通過對n進行位運算,該方法對正數還是非常有效的,

* 但是對於負數的時候,向右移動的時候最高為不能設為0,而是應該設定為1,

* 這個方法會陷入死迴圈。(待修改)

**/intnumberof1

(int n)

return count;

}/**

* 方法二:我們不對n進行位運算,而是對flag進行向左的位運算,但是這個方法迴圈的次數

* 等於整數二進位制的位數,32位的整數需要迴圈32次, 對於正負n都可以。

**/intnumberof2

(int n)

return count;

}/**

* 方法三:令人驚豔的解法

* 利用n和(n-1)與操作,能夠得到n去掉最右邊的1的結果

**/intnumberof3

(int n)

return count;

}int

main()

res =

(n&(n-1)

)?false

:true

// 該問題我們可以分成兩步:1、兩個數進行異或操作, 2、統計二進位制1的個數

#include

#include

using

namespace std;

intnumofstep

(int m,

int n)

return count;

}int

main()

劍指Offer精選程式設計面試題15 二進位制中1的個數

2 思路 3 與測試 要求 輸入乙個整數,輸出該數二進位制表示中1的個數。如輸入9,則輸出2。總體來分三種 思路一弊端 此操作輸入負數的時候容易引發死迴圈,因為負數移位的時候最高位會設為1,容易陷入死迴圈。思路二弊端 此操作的迴圈次數為整數二進位制的位數,為常規解法。思路三優勢 此操作的迴圈次數為整...

劍指offer 面試題 15 二進位制中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。初始化無符號整型變數 bit 1。迴圈依次將 bit 與 數 做與運算,如果結果為0,則 bit 左移一位 否則計數器 count 加1,同時bit 左移一位 當 bit 為 0 時 比如乙個int 型變數佔32位,那麼 bit 左移...

劍指offer 面試題15 二進位制中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。解決 1.位運算 乙個數減1的結果和它本身進行與運算,等於把這個數的二進位制表示中最右邊的1變成0。public int numberof1 int n return count 2.取巧 使用integer.bitcount int...