文章出處
文章列表
題目描述
輸入一個整數,輸出該數二進制表示中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;
}
};
文章列表
全站熱搜