摘要:
1.最先想到的办法是x对2求余,判断是否为零,不为零则最低位为1,x除以2,以此往复2.考虑到求余是2比较耗时,想到能否用位操作来处理,于是有了一下解法:x&0x01,如果为1,则最低位为1,x右移一位,以此往复3.位操作虽然比求余效率高,但上述两种解法的时间复杂度都是x的最高位为1的位数,即log2x,例如x为00100100,那么时间复杂度即为O(6),能否把时间复杂度将为只和1的个数相关呢? 编程之美中作者给出了答案: int Count(BYTE v){ int num = 0; while(v) {v&=(v-1); num++; } return num;}为何上面 阅读全文