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
#4
x&(x-1)来一次,会把最低位的‘1’给清成‘0’
#5
将x转化为2进制,看含有的1的个数。
每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。
每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。
#6
&是位与,一个bit一个bit的与
#7
这个函数貌似是返回X(2进制形式)的1的个数
比如 X=15 2进制为1111
则输出4
比如 X=31 2进制为11111
则输出5 。。。。。
比如 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
#4
x&(x-1)来一次,会把最低位的‘1’给清成‘0’
#5
将x转化为2进制,看含有的1的个数。
每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。
每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。
#6
&是位与,一个bit一个bit的与
#7
这个函数貌似是返回X(2进制形式)的1的个数
比如 X=15 2进制为1111
则输出4
比如 X=31 2进制为11111
则输出5 。。。。。
比如 X=15 2进制为1111
则输出4
比如 X=31 2进制为11111
则输出5 。。。。。
#8
微软和opera公司招聘c++的牛人。感兴趣联系我!!*ru711@hotmail.com