读书人

一道微软的c++笔试题没明白!望高手

发布时间: 2012-03-18 13:55:39 作者: rapoo

一道微软的c++笔试题,没明白!望高手解答!
#include<iostream>
using namespace std;
int func(int x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
void main()
{
int x=9999;
cout<<func(x)<<endl;
}

[解决办法]
计算二进制表示时‘1’的个数
[解决办法]
x&(x-1)来一次,会把最低位的‘1’给清成‘0’
[解决办法]
将x转化为2进制,看含有的1的个数。
每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。
[解决办法]
这个函数貌似是返回X(2进制形式)的1的个数
比如 X=15 2进制为1111
则输出4
比如 X=31 2进制为11111
则输出5 。。。。。

读书人网 >C++

热点推荐