劍指offer Q15 二進制中1的個數

思路

本題要求計算出一個整數的二進制中的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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章