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

2022-04-11 21:04:55 字數 730 閱讀 6502

題目:

/**

* 請實現乙個函式,輸入乙個整數,

* 輸出該二進位制表示中1的個數。

* 例如把9表示成二進位制是1001, 有2位是1。

* 因此如果輸入9,該函式輸出2。

*/

解題思路:常規的解法可以去遍歷整數對應二進位制的每一位,比如:數字9的二進位制1001,依次將每一位的數字與1進行 與 運算,若結果為1則表明對應的位數為1;

然後去累積計算1的總體個數。

**如下:

public

class

no10

public

static

int getnum(int

num)

return

count;

}}

但是因為int在記憶體中站32位,故這種方法為迴圈32次;

有沒有一種方法是二進位制中有多少個1就迴圈幾次;

答案是有的:首先要知道乙個知識點:把乙個整數減去1,然後把減去一的結果與該整數做運算,就會把最右邊的1變成0,由此可以統計二進位制中1的個數

**如下:

public

class

no10

public

static

int getnum(int

num)

return

count;

}}

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

請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1,因此如果輸入9,該函式輸出2.思路 1 針對正數,把n左移 把整數和1做位與運算看結果是不是0就知道了。1除了最右邊的一位之外所有的位都是0 除法的效率比移位運算要低很多,在實際程式設計中應盡...

劍指offer 10 二進位制數字1的個數

輸入乙個int型數字,輸出它作為二進位制的1的個數。如9的二進位制為1001,有2個1,則輸出2。法一 因為int型有4個位元組,一共32位,每次將輸入右移1,並和1進行 與 操作。將結果累加,則為1的個數。public class test10 return result public stati...

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

請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成1001,有2位是1。因此如果輸入9,該函式輸出2。1.可能引起死迴圈的解法 判斷輸入的整數最右一位是否為1,然後迴圈右移,但是問題是如果輸入的整數是乙個負數,那麼迴圈右移就會變成死迴圈。2.常規解法 將輸入的整數不進行右移...