问题描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 —— 剑指Offer · 面试题15
解题思路
这个题目的解题思路也听广泛的,最简单的方法就是转换为二进制之后遍历一遍二进制的“字符串数组”找到其中ASCII码等于1的所有结点。
比较巧妙的解法使用了位运算。下面的实现方法就是使用位运算。
实现源码
class Solution {
public:
int NumberOf1(int n) {
int count = 0;
while(n) {
count ++;
n = (n - 1) & n; //位运算
}
return count;
}
};