《劍指offer第二版》題15:二進制中1的個數(shù)

題目:請實現(xiàn)一個函數(shù), 輸入一個整數(shù),輸出該數(shù)二進制表示中1的個數(shù)。例如把9表示成二進制是1001 ,有2位是1。因此如果輸入9,則該函數(shù)輸出2。

解題思路:

最簡單的方式,將數(shù)字與1相與判斷是不是1,然后將數(shù)字每次右移一位然后再次與1相與。

注意:正整數(shù)二進制表示最高位是0,負整數(shù)二進制表示最高位是1。如果是負數(shù)的話,一直右移那么與1相與一直是1。怎么辦呢?在Java中int是32位,我們只需要右移32次就可以了。

/**
 * @param n
 * @return 數(shù)字二進制表示中1的個數(shù)
 */
public static int numberOfOne(int n) {
    int result = 0;
    for (int i = 0; i < 32; i++) {
        result += (n & 1);
        /**
         * 這里用帶符號右移和無符號右移都可以,因為循環(huán)移動32次就結(jié)束了,不會出現(xiàn)死循環(huán)的問題。
         */
        n >>= 1;
    }
    return result;
}

測試用例

/**
 * -5在計算機中用補碼表示是 1111 1111 1111 1111 1111 1111 1111 1011
*/
System.out.println(numberOfOne(-5));
System.out.println(numberOfOne(5));

輸出結(jié)果

31
2

參考鏈接:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容