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

时间:2021-10-27 17:06:44
#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;
}

8 个解决方案

#1


计算二进制表示时‘1’的个数

#2


&是与操作吧,x&(x-1)这句是分别转换成2进制进行与吗?9999这数也太大了吧

#3


引用 1 楼 ooily 的回复:
计算二进制表示时‘1’的个数

#4


x&(x-1)来一次,会把最低位的‘1’给清成‘0’

#5


将x转化为2进制,看含有的1的个数。
每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。

#6


引用 2 楼 wangdeqie 的回复:
&是与操作吧,x&(x-1)这句是分别转换成2进制进行与吗?9999这数也太大了吧

&是位与,一个bit一个bit的与

#7


这个函数貌似是返回X(2进制形式)的1的个数 
比如 X=15 2进制为1111 
则输出4 
比如 X=31 2进制为11111 
则输出5 。。。。。

#8


微软和opera公司招聘c++的牛人。感兴趣联系我!!*ru711@hotmail.com

#1


计算二进制表示时‘1’的个数

#2


&是与操作吧,x&(x-1)这句是分别转换成2进制进行与吗?9999这数也太大了吧

#3


引用 1 楼 ooily 的回复:
计算二进制表示时‘1’的个数

#4


x&(x-1)来一次,会把最低位的‘1’给清成‘0’

#5


将x转化为2进制,看含有的1的个数。
每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。

#6


引用 2 楼 wangdeqie 的回复:
&是与操作吧,x&(x-1)这句是分别转换成2进制进行与吗?9999这数也太大了吧

&是位与,一个bit一个bit的与

#7


这个函数貌似是返回X(2进制形式)的1的个数 
比如 X=15 2进制为1111 
则输出4 
比如 X=31 2进制为11111 
则输出5 。。。。。

#8


微软和opera公司招聘c++的牛人。感兴趣联系我!!*ru711@hotmail.com