28.整数的二进制表示中1的个数
题目:输入一个整数,求该整数的二进制表达中有多少个1。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
分析:
这是一道很基本的考查位运算的面试题。
包括微软在内的很多公司都曾采用过这道题。
/*
Name:
Copyright:
Author:
Date: 16-06-11 20:35
Description: 整数的二进制表示中1的个数(运算)
题目:输入一个整数,求该整数的二进制表达中有多少个1。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
分析:
这是一道很基本的考查位运算的面试题。
包括微软在内的很多公司都曾采用过这道题。
*/
#include<iostream>
#include<iomanip>
using namespace std;
int cfun(unsigned int x,int &sum)
// 如果定义成 int 会出错
{
sum=0;
while(x)
{
++sum;
x&=(x-1);
}
return true;
}
int main()
{
int sum;
int x=0xffffffff;
cfun(x,sum);
cout<<sum<<'\n';
system("pause");
return 0;
}
分析:变量x代表要测试的整数,函数cfun中的变量为unsigned int,这是一个潜在的转换,将负数看成无符号整数。算法很巧妙,仔细想想,确实能正确计算出来。