劍指offer之二進位制中1的個數

2021-07-26 14:59:58 字數 428 閱讀 4796

思路一:判斷整數二進位制表示中最後一位是不是1,然後將整數右移一位。重複這個步驟,直到整數變為零。

(1)如何判斷最後一位是不是1?

將整數與1做&運算,結果為1,是。結果為0,不是。

(2)右移一位和將整數除以2在數學上等價,可以相互替換嗎?

不能,除法的效率要比移位運算低得多。實際程式設計中盡可能用移位運算附代替乘除法。

(3)如果是負數,會出現什麼情況?

由於是負數,右移會將最高位設為1,這樣整個計算會陷入死迴圈(二進位制表示中會有越來越多的1)。

思路二:為了避免陷入死迴圈,不右移輸入的數字。改為左移1。該演算法迴圈的次數等於整數的二進位制位數。

思路三:該演算法實現了二進位制整數有幾個1就迴圈幾次。

將二進位制整數與其減一後的二進位制數做&運算。就會將最後一位1變為0。直到二進位制整數變為零,能迴圈幾次就代表有幾個1。

劍指Offer之二進位制中1的個數

題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。輸入 輸入可能包含多個測試樣例。對於每個輸入檔案,第一行輸入乙個整數t,代表測試樣例的數量。對於每個測試樣例輸入為乙個整數。n保證是int範圍內的乙個整數。輸出 對應每個測試案例,輸出乙個整數,代表輸入的那個數中1的個數。樣...

劍指offer十一之二進位制中1的個數

一 題目 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。二 思路 方法一 用1 1自身左移運算,其實後來就不是1了 和n的每位進行位與,來判斷1的個數 方法二 把乙個整數減去1,再和原整數做與運算,會把該整數最右邊乙個1變成0.那麼乙個整數的二進位制有多少個1,就可以進行多少次這...

劍指Offer 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。1 可能引起死迴圈的解法 先判斷整數二進位制表示中最右邊一位是不是1。接著把輸入的整數右移一位,此時原來處於從右邊數起的第二位被移到最右邊了,再判斷最右邊的...