題目描述
輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。
思路:
如果一個二進制整數不爲 0 , 那它必定含有 1 ,如果這個數減 1 ,那麼最右邊 1 就會變成 0 ,原來在這個 1 後面的 0 都會變成 1 ,其餘位不會受到影響
例如 1101000 , 減 1 得 1100111, 再和原來的數做與運算,得 1100000
按同樣的方法計算一次,得 1000000
所以二進制中 1 的個數,可以通過在n不等於0時 n&(n-1) 的次數得出
以下代碼:
public class Solution {
public int NumberOf1(int n) {
int sum = 0;
while(n != 0){
n = n&(n-1);
sum++;
}
return sum;
}
}