gpt4 book ai didi

c - "cnt += num % 2;"和 "if (num % 2)++cnt;"之间的区别

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

“cnt += num % 2;”和“if (num % 2)++cnt;”之间的区别我成功地统计了二进制数中“1”的个数。但似乎做同样事情的一行会产生不同的结果。

全局变量“cnt=0”在代码顶部声明

#include<stdio.h>
int cnt=0;

//and the recursive function which counts '1' is here
int one( int num ) {
if (num < 2)
{
cnt += num;
return cnt ; //here, escape and return cnt to main.
}
else
{
one(num / 2);
cnt += num % 2; //according to the remainders cnt++ AND THIS IS THE THE QUESTION CORE
}
}

void main() {
int num;
scanf("%d", &num);

cnt=one(num); //call recursive function
printf("%d", cnt); //and here, i want to watch the [RESULT]
}//main

[结果]

当我使用“cnt += num % 2; ”时打印正确答案但另一个看起来相同的代码“if (num % 2)++cnt;”打印错误的答案。

num%2 必须是 0 或 1。因此它会将“1”添加到 cnt 中。但第二个代码不起作用。

我错过了哪一点?

最佳答案

除了 else 分支 中缺少 return 之外,您在 .. 中使用全局 var cnt 并不是一种合适的方式(这些是你错过了)。下面的代码运行良好:

int one(int num) {
if (num < 2) {
return num;
} else {
return (num % 2) + one(num / 2);
}
}

希望有帮助。

关于c - "cnt += num % 2;"和 "if (num % 2)++cnt;"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49154684/

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