static int test()
        {
            int x = 9999;
            int count=0;
            while (Convert.ToBoolean(x))
            {
                count++;
                    x=x&(x-1);
                    Console.WriteLine(x);            }
            return count;
        }
怎么理解这个函数。

解决方案 »

  1.   

     (Convert.ToBoolean(x)) 
    判断是否含有1,如果有的话,肯定为真,count加1x = x & (x - 1);去掉它的一个1如果x最后一位是1,很明显,去掉了一个1****1,减1的话,变成****0,再与一下,结果还是****0,少了最后的1如果最后一位不是1****0,减1之后,再与一下,最后一位肯定也是0,由于最后一位是0,减一之后肯定影响前面的,前面的也会少一个1这样到最后没有1的时候就结束了,返回1的个数
      

  2.   

    返回值count是8
    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一楼说的似乎不大对