来自《编程之美》
以10100001来举例。如果只考虑和1的个数相关,那么,我们能否在每次判断中,仅与1来进行判断呢?为了简化问题,我们考虑只有一个1的情况。例如:01000000。
如何判断给定二进制数里面有且仅有一个1呢?可以通过判断这个数是否是2的整数次幂来实现。另外,如果只和这一个“1”进行判断,如何设计操作呢?我们知道,如果进行这个操作,结果为0或1,就可以得到结论。
如果希望操作后的结果是0,01000000可以和00111111进行“与”操作。
这样,要进行的操作就是01000000&(01000000-00000001)=01000000&00111111=0
int Count(BYTE v){
int num=0;
while(v){
v &= (v-1);
num++;
}
}
另外,该段代码稍作变形就可以求二进制最高位的位置。