int test(int arg)
{
int i = arg;
int result = 0;
while( i > 0) {
if(i ^(i-1) > 0) {
i = i & (i -1);
result ++;
}
}
return result;
}
+====================================+
核心代码如上:(本人突然想起别人问过的问题,没有检验)
算法思想:
对于一个非负整数,二进制的情况:
(1) 00;(2)10;(3)01;(4)11
形式如上, 中间可以间隔多个0
(1) i = 0, return result=0
(2)10 ^01 = 11 > 0, result ++ ==> 1
10&01 = 00, end
(3) 01^00 = 01>0, reuslt++ ==>1
01&00 = 0, end
(4) 11^10=01>0, result++ ==> 1
11&10=10>0
10^01=11>0, result++==>2
10&01=0, end
计算机中,位操作,&^~|,>>,<<