c语言中 x=x&(x-1)实现什么功能?大侠帮忙

 我来答
风若远去何人留
2015-12-30 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450104
专业C/C++软件开发

向TA提问 私信TA
展开全部
将x的二进制值中,最后一个1置0,其它不变。即达到从x的尾部,删除一个1的效果。

二进制的减法规则中可以得知,在做x-1时,当把x写作
A1B
的形式,其中A为随意值,B为若干个0,可能为0个。
这时x-1的值,实际上是
A0C
的形式,其中A值不变,C为与B相同位数的1.
这样
x&(x-1)的结果,根据按位与的特性,当操作数一方为0时,结果为0,于是
x&(x-1) = A0B
对比x原始值A1B,x&(x-1)即把最后一个1改成0.
cooldaizi
2010-08-18 · TA获得超过624个赞
知道小有建树答主
回答量:588
采纳率:0%
帮助的人:457万
展开全部
x-1后再和x进行“与”运算,结果赋给x
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ColinLeung
2010-08-18 · 超过12用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:0
展开全部
算x的二进制中bit1的个数用
int count = 0;
while (x)
{
x=x&(x-1);
count++;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小秦雪飞刀
2010-08-18
知道答主
回答量:12
采纳率:0%
帮助的人:1.9万
展开全部
可以用来判断x是不是2的n次方的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式