问题描述
计算在一个 32 位的整数的二进制表式中有多少个 1.
样例
给定 32 (100000),返回 1
给定 5 (101),返回 2
给定 1023 (111111111),返回 9
笔记
利用特性 num & (num - 1) 可以去掉二进制中最低位的1。
代码1,笨方法
class Solution {
public:
/**
* @param num: an integer
* @return: an integer, the number of ones in num
*/
int countOnes(int num) {
// write your code here
int tmp = 1;
int cnt = 0;
for (int i = 0; i < 32; i++)
{
// std::cout << '&' << (num&tmp) << ' '<< tmp << endl;
if ((num & tmp) == tmp)
cnt++;
tmp = tmp << 1;
}
return cnt;
}
};
代码2,利用特性
class Solution {
public:
/**
* @param num: an integer
* @return: an integer, the number of ones in num
*/
int countOnes(int num) {
// write your code here
int cnt = 0;
while(num)
{
num = num & (num - 1);
cnt ++;
}
return cnt;
}
};