牛客連結
二進制中1的個數
題目
輸入一個整數,輸出該數32位二進制表示中1的個數。其中負數用補碼表示。
解題思路
如果一個數 -1 ,二進制中的表示為最右邊的一個1變為0,後面的所有0變為1。
例如12(1100)減去1,則變為11(1011),轉變過程為:
1100 -> 1000(先将最右邊的1變為0) -> 1011(再将後面的0變為1)
此時将目前的值,與減去1後的值按位與(1100&1011) 就得到了1000(相當于已經計算了一個1,讓count++) 重複上述步驟 直到最後的值為0即可。
代碼實作
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n!=0) {
count++;
n = n&(n-1);
}
return count;
}
}