輸入乙個整數,輸出該數二進位制表示中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...