第15題 二進位制中1的個數

2022-08-23 14:21:19 字數 950 閱讀 5521

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

從n的2進製形式的最右邊開始判斷是不是1,該解法如果輸入時負數會陷入死迴圈,因為負數右移時,在最高位補得是1,本題最終目的是求1的個數,那麼會有無數個1了。

思想:用1(1自身左移運算,其實後來就不是1了)和n的每位進行位與,來判斷1的個數

private static int numberof1_low(int n) 

return count;

}

迴圈的次數等於二進位制的位數,32位需要迴圈32次,

思想:用於消去x的最後一位的1

x & (x-1)

x = 1100

x-1 = 1011

x & (x-1) = 1000

由 x & (x-1) 消去x最後一位知。迴圈使用x & (x-1)消去最後一位1,計算總共消去了多少次即可。

有幾個1,就迴圈幾次。

class solution 

return count;

}};

n如果是2的冪次,則n滿足兩個條件。

1.n>0

2.n的二進位制表示中只有乙個1,所以使用n&(n-1)將唯一的乙個1消去。

如果n是2的冪次,那麼n&(n-1)=0,即可判斷

如果a和b在第i(0<=i<32)個位上相等,則不需要改變這個bit位,如果在第i位上不相等,則需要改變這個bit位。

所以問題轉化為了a和b有多少個bit位不相同。

聯想到位運算有乙個異或操作,相同為0,相異為1,所以問題轉變成了計算a異或b之後這個數中1的個數。

1.n=a^b;

2.n的1的個數。

15 二進位制中1的個數

請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000000...

二進位制 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...

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

請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000000...