gpt4 book ai didi

c - 程序不扫描数字 149,对于任何其他数字,它返回 0

转载 作者:行者123 更新时间:2023-11-30 20:52:58 25 4
gpt4 key购买 nike

我的程序应该扫描某个数字(unsigned long int)并返回其奇数“打开”索引位(来自数字的二进制表示形式)。但程序不识别任何数字,只返回 0,或者根本不响应该数字。我做错了什么?

这是函数:

int count_odd_bits(unsigned long int x) {

int count = 0;
while (x) {
if ((x % 2 == 1) && (x & 1))
count++;
else
x = x << 1;

}
return count;
}

这是主要功能:

int main() {

unsigned long int x;
printf("\n enter a number: \n");
scanf("%ul", &x);
int count_odd_bits(unsigned long int x);
printf("\n the result is:%d \n",count_odd_bits(x));

return 0;
}

对于数字 149,它应该返回 1(仅打开第 7 位)

最佳答案

在函数中,当 if 为 true 时,您不会更改 x。所以你最终会陷入无限循环。

int count_odd_bits(unsigned long int x) {

int count = 0;
while (x) {
if ((x % 2 == 1) && (x & 1))
count++; // x not changed --> endless loop!!
else
x = x << 1;

}
return count;
}

此外,您似乎需要 x = x >> 1; 而不是当前代码。

此外,您不需要同时使用 x % 2 == 1x & 1,因为它们是相同的。

所以计算个数的代码可以是:

int count_odd_bits(unsigned long int x) {

int count = 0;
while (x) {
if (x & 1) count++;
x = x >> 1;
}
return count;
}

如果您只想计算奇数位位置,请执行

int count_odd_bits(unsigned long int x) {

int count = 0;
x = x >> 1; // get rid of bit zero
while (x) {
if (x & 1) count++;
x = x >> 2; // shift by 2 to get 1->3->5->....
}
return count;
}

关于c - 程序不扫描数字 149,对于任何其他数字,它返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55314014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com