想得到一个整数变为2进制数时的1的个数,这段代码有什么问题:#include <stdio.h> int main() { int m=0,n; scanf("%d",&n); while(n){ if(n&&0x01==1){ m++; n>>=1; } else{ n>>=1; } } printf("%d",m); return 0; }
时间: 2024-04-12 21:31:11 浏览: 112
c++ 一个二进制串转化为整数的解决方法
5星 · 资源好评率100%
这段代码存在两个问题:
1. 在条件判断语句中,将`n && 0x01`与`1`进行比较。这是不正确的,因为`n && 0x01`的结果是一个布尔值(0或1),而非1。应该使用相等运算符`==`来比较,即`n & 0x01 == 1`。
2. 在循环中,`n>>=1`的语句应该放在if和else语句块的外面,以确保每次迭代都能更新`n`的值。
修正后的代码如下:
```c
#include <stdio.h>
int main() {
int m = 0, n;
scanf("%d", &n);
while (n) {
if (n & 0x01 == 1) {
m++;
}
n >>= 1;
}
printf("%d", m);
return 0;
}
```
请注意,这段代码只会计算整数二进制表示中1的个数,并不包括符号位。如果需要考虑符号位,请使用无符号整数类型(例如`unsigned int`)。同时,该算法的时间复杂度为O(log n),其中n是输入整数的位数。
阅读全文