如果x=2014,下面函数的返回值是()

#include <stdio.h>



int fun(unsigned int x)
{
int n=0;
while((x+1))
{
n++;
x = x|(x+1);
}

return n;
}
int main()
{
int b = fun(2014);

printf("%u\n", b);
}

返回值为:23
2014对应的二进制为:0000 0000 000 0000 0000 0111 1101 1110
而x|(x+1)的作用是对一个数中二进制0的个数进行统计
例如本题:
第一次循环:
0000 0000 000 0000 0000 0111 1101 1110 |0000 0000 000 0000 0000 0111 1101 1111 =
0000 0000 000 0000 0000 0111 1101 1111

.
.
.
每循环一次0的数量减一 ,直到溢出
所以2014二进制中一共有23个0则返回值为23