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。请问大虾们,怎么手动算的 展开
int x=9998;
while(x)
{
countx++;
x=x&(x-1);
}
当循环结束时,countx等于多少,我运行了 结果是7。请问大虾们,怎么手动算的 展开
3个回答
展开全部
二进制 十进制 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 循环结束
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 循环结束
展开全部
我记得这个程序是统计一个数的二进制形式中的1的个数,你把x表示为二进制格式数一数就知道了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
第一次 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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询