C语言题 按位与运算

intcountx=0;intx=9998;while(x){countx++;x=x&(x-1);}当循环结束时,countx等于多少,我运行了结果是7。请问大虾们,怎... int countx=0;
int x=9998;
while(x)
{
countx++;
x=x&(x-1);
}
当循环结束时,countx等于多少,我运行了 结果是7。请问大虾们,怎么手动算的
展开
 我来答
百度网友2e27ccc06
2012-02-09 · TA获得超过259个赞
知道小有建树答主
回答量:122
采纳率:100%
帮助的人:70.2万
展开全部
二进制 十进制 countx的值
10011100001110(9998)
10011100001101(9997)c=1

10011100001100(9996)
10011100001011(9995)c=2

10011100001000
10011100000111 c=3

10011100000000
10011011111111 c=4

10011000000000
10010111111111 c=5

10010000000000
10001111111111 c=6

10000000000000
01111111111111 c=7

00000000000000 循环结束
jdjijsvdklsj
2012-02-09 · 超过15用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:60.1万
展开全部
我记得这个程序是统计一个数的二进制形式中的1的个数,你把x表示为二进制格式数一数就知道了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
455175633
2012-02-09 · TA获得超过301个赞
知道小有建树答主
回答量:632
采纳率:0%
帮助的人:412万
展开全部
9998 在2进制中等于0010 0111 0000 1110
第一次 x-1的2进制是0010 0111 0000 1101&0010 0111 0000 1110
x在第一次计算出结果是0010 0111 0000 1100
也就是while循环的运行次数是按照x的初值9998的二进制算的
如果你x&(x-1)相当于去掉了2进制的一个1 是从末尾去除
等二进制中的1去光了他的循环就结束了。。
你看9998的二进制1一共有7个。
也就是说他去掉了7个1, 也就是循环了7次!
因为x-1 的时候x的位会错开。

&的作用介绍。
1&1=1
1&0=0
0&0=0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式