Linuxer
人生的乐趣有多种:爱、享受、冒险等等,还有发现和创造。能享受后两种乐趣的人并不多。做事应该带着发现的心态而不是争强好胜的心态。

导航

 
  • 问题:给定一个整数,如何判断该整数的二进制表示里有多少个1。
  • 现实用途:应该可以用于数据的校验。

解法(c++):

#include <iostream>
#include <assert.h>

using namespace std;

// 求解x的二进制表示里有多少个1的算法。
// x = x & (x -1); 每次消掉一个1.
int get_one_bit_count(int x) {
    int count = 0;
    while(x){
        count ++;
        x = x & (x - 1);
    }
    return count;
}

// 用例测试
int main() {
    assert(get_one_bit_count(32) == 1);
    assert(get_one_bit_count(15) == 4);
    assert(get_one_bit_count(7) == 3);
    assert(get_one_bit_count(0) == 0);
    return 0;
}

2015-03-13 Fri

posted on 2015-03-13 13:54  JollyWing  阅读(347)  评论(0编辑  收藏  举报