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

2021-09-24 09:21:11 字數 457 閱讀 8918

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。

解決:1.位運算

乙個數減1的結果和它本身進行與運算,等於把這個數的二進位制表示中最右邊的1變成0。

public int numberof1(int n) 

return count;

}

2.取巧

使用integer.bitcount(int n);方法統計1的個數。

public int numberof1(int n)
舉一反三:

1)用一條語句判斷乙個整數是不是2的整數次方

解決:乙個數如果是2的整數次方,那麼他的二進位制表示中有且僅有一位是1,其他都是0

2)輸入兩個整數m和n,計算需要改變m的二進位制表示中的多少位才能得到n

解決:計算兩個數的異或,統計異或結果中1的位數。

劍指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為止。那麼,如何判斷乙個整數的最...