《剑指offer》-统计整数二进制表示中1的个数

题目描述
输入一个整数,输出该数二进制表示中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;
	}
};
原文地址:https://www.cnblogs.com/zjutzz/p/6501564.html