文章出處

題目描述
輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。

直觀思路就是把二進制表示從右往左統計1的個數。直接想到移位操作來迭代處理。坑點在于負數的移位操作會填充1。有人貼出了邏輯移位操作,但還是麻煩。直接按照int的位數,32或64,做這么多次移位操作就好了,每次移位操作累計是否為1。int的位數是32還是64,可以寫一個函數來做到,而不是硬編碼。

class Solution {
public:
    int  NumberOf1(int n) {
        int cnt = 0;
        int i = 0;
        int int_bit_length = get_int_bit_length();
        while (i<int_bit_length){
            cnt += (n & 1);
            n = (n >> 1);
            i = i + 1;
        }
        return cnt;
    }
    int get_int_bit_length(){
        int a = 1;
        int bit_cnt = 0;
        while (a != 0){
            a = (a<<1);
            bit_cnt += 1;
        }
        return bit_cnt;
    }
};

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()