思路
本題要求計算出一個整數的二進制中的1的個數,考察的是位運算的運用和理解。
本題會用到>>、>>>、&等運算符,不會的可以去查一下。
本題的重點在於怎樣去統計1的個數,其實這個和去計算一個數各位數之和類似(比如讓你求39的各位數之和,也就是12)。
那個題是循環取餘法去取得各個位的值然後加起來即可,那麼我們是否可以採用類似的方法呢?
注意到本題的數實際上是在二進制上進行操作,而那個題是在10進制上進行取模10操作的.那類似的我們可以在二進制上進行取模2操作,這樣就能獲取這個數最右邊上的值了,假設9的二進制是1001,那麼對其進行取模2得到的就是那個1,那麼這樣就能進行統計了。
代碼
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int sum=0;
while(n!=0){
if((n&1)!=0)sum++;
n=n>>>1;
}
return sum;
}
}