首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一道微软的c++笔试题,没明白!望高手解答!解决办法

2012-03-18 
一道微软的c++笔试题,没明白!望高手解答!#includeiostreamusing namespace stdint func(int x){int cou

一道微软的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 。。。。。

热点排行