)
1、逐位检查法#includestdio.h int main() { int count 0; int num 5; while(num!0) { if(num1 1) { count; } numnum1 } printf(二进制中1的个数%d“count return 0 }按位与是两位都是1结果才是1只要任意一位是0结果都是0按位异或^:对应位相同为1不同为0按位或只要对应比特位上有1结果就是1这个算法有一个问题我们知道-1的二进制是11111111取反码再补码与1还是-12固定循环次数法#includestdio.h int main() { int num -1; int count 0; for(int i0;i32;i) { if((numi)11) { count; } } printf(二进制中1的个数%d“count return 0 }这个代码就是限制了循环次数固定31次加上符号为就可以计算出多少个1了这段代码在32位系统上统计int中1的个数对num-1这种特殊值结果正确但是存在可移植性差和依赖系统的问题3nn-1#inxludestdio.h int main() { int num-1; int count0; while(num!0) { count; numnum(num-1); } printf(“二进制中1的个数%d“count return 0 }这种方法循环次数就是1的个数