直接上题目:为下面程序当x=9999时的运行结果?
1 int func(int i) 2 { 3 int c = 0; 4 while(x) 5 { 6 c++; 7 x = x&(x-1); 8 } 9 return c; 10 }
可惜人家不是让你在编译器上跑的!咱们就分析一下!
关键就在 x = x & (x-1) 这一句话,分析:每执行一次会将x表示的二进制数的最右边的1变成0,可以参见这里
思路:将x 转化为2 进制,看含有的1 的个数。
可以得到这样的代码。
int func(int i) { int count = 0; while(i) { if(i & 1) //如果i=1就计数 count ++; i = i >> 1; //右移一位 } return count; }