本文共 515 字,大约阅读时间需要 1 分钟。
//方法一,模2,余数为1,个数加1。再右移,直到v=0;时间复杂度为log2(v) int number(BYTE v){ int num=0; while(v){ if(v%2==1)num++; v=v>>1; //v=v/2; } return num; } */ /* //方法二:最后一位与1&,如果结果是1,二进制中1的个数加1.时间复杂度为log2(v)。 int number(BYTE v){ int num=0; while(v){ num+=v&0x01; v=v>>1; } return num; } */ //方法三:循环次数等于二进制中1的个数。v&(v-1),每与一次,1的个数减1.时间复杂度为n(m),m为1的个数。 int number(BYTE v){ int num=0; while(v){ v&=(v-1); num++; } return num; }
转载地址:http://iokmi.baihongyu.com/