二進(jìn)制中1的個(gè)數(shù)
輸入一個(gè)整數(shù),輸出該數(shù)二進(jìn)制表示中1的個(gè)數(shù)。其中負(fù)數(shù)用補(bǔ)碼表示。
思路:n &= n-1時(shí)就可以消去一個(gè)1;
比如n(10) = 11時(shí)
n(2) = 1011
| n | n&n-1 | 1的個(gè)數(shù)(操作次數(shù)) |
|---|---|---|
| 1011 | 1011&1010 = 1010 | 1 |
| 1010 | 1010&1001 = 1000 | 2 |
| 1000 | 1000&0111 = 0000 | 3 |
n = 0,結(jié)束,3個(gè)1。
class Solution {
public:
int NumberOf1(int n) {
int nn = 0;
while(n!= 0){
nn++;
n &= n-1;
}
return nn;
}
};