This question was migrated from Software Engineering Stack Exchange because it can be answered on Stack Overflow. Migrated5年前。Learn more。
为什么输出是7而不是8?(我是一个编程初学者,请容忍我。)
当代码以结构化的方式呈现时,更容易阅读,例如:
现在是死刑的一个打击。
因为
总条件计算为1,因为
执行
打印当前值
程序返回0并终止。
同样值得注意的是,您的
#include <stdio.h>
int main()
{
int k=5;
if(++k < 5 && k++ / 5 || ++k <= 8)
{
printf("%d",k);
}
return 0;
}
为什么输出是7而不是8?(我是一个编程初学者,请容忍我。)
最佳答案
Operator precedence和逻辑表达式short circuit evaluation。
逻辑条件中的&&
绑定比||
更紧密,因此条件相当于:
((++k<5 && k++/5) || ++k<=8)
当代码以结构化的方式呈现时,更容易阅读,例如:
int main() {
int k=5;
if ((++k<5 && k++/5) || ++k<=8) {
printf("%d",k);
}
return 0;
}
现在是死刑的一个打击。
k
从5点开始。++k<5
前进到6,而不是k
。<5
表达式的后半部分永远不会计算,因为&&
。因为
0 && ANYTHING == 0
的左侧为0,所以右侧不短路。必须进行评估。||
前进到7,即++k<=8
。总条件计算为1,因为
k
的右侧为1。执行
<=8
语句的“then”子句。打印当前值
||
,即7。程序返回0并终止。
同样值得注意的是,您的
if
子句的后半部分可能没有按照您的意图执行。k
是整数除法,并且由于始终&&
,k++/5
将始终k>5
,因此始终为真。关于c - 基本逻辑运算符问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25577166/