Online Compiler C

#include <stdio.h> int count_binary_ones(int n) { int sum=0; if(n%2==0){ sum++; }else return (n/2+n%2); return sum; } int main() { int x, all; scanf("%d", &x); all = count_binary_ones(x); scanf("%d",all); return 0; }
这段代码的目的是计算一个整数的二进制表示中1的个数,但实现有误。函数 `count_binary_ones` 的逻辑不正确,它只检查了奇偶性,并没有真正统计二进制位中的1。主函数中也有多余的 `scanf` 调用。

- 函数 `count_binary_ones` 中的条件 `if(n%2==0)` 只判断了最低位是否为0,但统计二进制1的个数需要检查所有位。你应当考虑使用循环,每次检查最低位后右移一位,直到数字变为0。
- 主函数中 `scanf("%d",all);` 这一行是错误的,`scanf` 需要传入变量的地址(即 `&all`),而且这里似乎不需要再次输入。另外,`all` 已经存储了结果,应该直接输出它。