整数的二进制表示中1的个数(28)

来源:互联网 发布:网络推广需要多少钱 编辑:程序博客网 时间:2024/04/30 03:33

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,这是一个潜在的转换,将负数看成无符号整数。算法很巧妙,仔细想想,确实能正确计算出来。