法一:参数num%2若为1表示第一位补码是1,反则不是,num/2是将参数num向右移动一位,继续判断第一位补码是否为1,依次循环到num为0。最后统计补码有多少个1。
10的二进制补码:1010 10%2=0
10/2=5的二进制补码:0101 5%2=1
5/2=2的二进制补码:0010 2%2=0
2/2=1的二进制补码:0001 1%2=1
#include <stdio.h>
int NumberOf1(unsigned int num) {//计算参数num的二进制补码中有几个1
int count = 0;//统计1的个数
while (num) {
if (1 == num % 2) {
count++;
}
num /= 2;
}
return count;
}
int main() {
int n = 10;
int ret= NumberOf1(n);
printf("%d的二进制补码中有 %d 个1\n",n, ret);
return 0;
}
运行结果: