/*
问题描述:计算在一个 32 位的整数的二进制表示中有多少个 1.
来源:LintCode
作者:syt
问题描述:计算在一个 32 位的整数的二进制表示中有多少个 1.
来源:LintCode
作者:syt
日期:2017-7-23 & 2017-8-20
思路:因为负数的存储是用补码存储,将所有的数变成正数,求该正数的二进制就比较好求
*/
#include <iostream>
using namespace std;
/**
* @param num: an integer
* @return: an integer, the number of ones in num
*/
int countOnes(int num) {
// write your code here
int result = 0;
unsigned int t;
if (num < 0)
{
t = 4294967296 + num;
}
else
t = num;
while (t != 0)
{
if (t % 2 == 1)
{
result++;
}
t = t / 2;
}
return result;
}
第二种方法,位操作
int countOnes(int num)
{
int count = 0;
while (num != 0)
{
num = num & (num - 1);
count++;
}
return count;
}