static int test()
{
int x = 9999;
int count=0;
while (Convert.ToBoolean(x))
{
count++;
x=x&(x-1);
Console.WriteLine(x); }
return count;
}
怎么理解这个函数。
{
int x = 9999;
int count=0;
while (Convert.ToBoolean(x))
{
count++;
x=x&(x-1);
Console.WriteLine(x); }
return count;
}
怎么理解这个函数。
判断是否含有1,如果有的话,肯定为真,count加1x = x & (x - 1);去掉它的一个1如果x最后一位是1,很明显,去掉了一个1****1,减1的话,变成****0,再与一下,结果还是****0,少了最后的1如果最后一位不是1****0,减1之后,再与一下,最后一位肯定也是0,由于最后一位是0,减一之后肯定影响前面的,前面的也会少一个1这样到最后没有1的时候就结束了,返回1的个数
9,9,9,9
1001,1001,1001,1001
9,9,9,8 =>返回值是7
1001,1001,1001,1000 =>7个1
9,9,9,7 =>返回值是7
1001,1001,1001,0111 =>9个1一楼说的似乎不大对