劍指offer第11題:
輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。
理解:
本題可以用最直接的方法,讓1同最低位做與運算,如果結果不爲0,說明這一位是1,計數器加1;另外一種方法是讓輸入n同(n-1)做與運算,這樣每次運算可以消除一個“1”,同樣可以計算“1”的個數。這種方法的效率更高,代碼如下:
public class Solution {
public int NumberOf1(int n) {
int count = 0;
while(n != 0){
n = n & (n-1);
count++;
}
return count;
}
}
知識點:
- 位運算;
- 位與運算