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