Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
我目前正在为决赛做准备。我无法弄清楚这个答案,以及为什么会是那个答案。有人能向我解释答案以及它是如何产生的吗?这是从一个旧的考试。先感谢您!
输出:
这里是逻辑运算符,现在您需要知道某些表达式(如(expr1 || expr2))的情况,当expr1为零或false时,expr2被执行,这里i = 2,因此不会。同样,在执行(expr1 || expr2)之后,第一个printf打印true(1)或false(0)
输出:
最后,在(expr1 && expr2)的情况下,expr2仅在expr1为true或1时执行,在这种情况下expr1为true,因此++ k不会消失。对于第一张printf,也要遵循上述相同的规则。
输出:
请同时参阅以下参考资料:
Order of execution for an if with multiple conditionals
Order of logical OR execution in C
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
我目前正在为决赛做准备。我无法弄清楚这个答案,以及为什么会是那个答案。有人能向我解释答案以及它是如何产生的吗?这是从一个旧的考试。先感谢您!
int main(){
int i = 1, j=1, k=1;
printf("%d", ++i || ++j && ++k);
printf("%d %d %d \n", i, j, k);
return 0;
}
最佳答案
如果您不知道运算符的优先级,请使用here这个程序来了解优先级,这是一个非常简单的示例。根据我的理解,这就是我的想法,让我们逐步进行(按照从左到右的关联):
++胜过一切,我无语:
int main(){
int i = 1, j=1, k=1;
printf("%d\n", ++i );
printf("%d %d %d \n", i, j, k);
return 0;
}
输出:
2
2 1 1
这里是逻辑运算符,现在您需要知道某些表达式(如(expr1 || expr2))的情况,当expr1为零或false时,expr2被执行,这里i = 2,因此不会。同样,在执行(expr1 || expr2)之后,第一个printf打印true(1)或false(0)
int main(){
int i = 1, j=1, k=1;
printf("%d\n", ++i || ++j);
printf("%d %d %d \n", i, j, k);
return 0;
}
输出:
1
2 1 1
最后,在(expr1 && expr2)的情况下,expr2仅在expr1为true或1时执行,在这种情况下expr1为true,因此++ k不会消失。对于第一张printf,也要遵循上述相同的规则。
int main(){
int i = 1, j=1, k=1;
printf("%d\n", ++i || ++j && ++k);
printf("%d %d %d \n", i, j, k);
return 0;
}
输出:
1
2 1 1
请同时参阅以下参考资料:
Order of execution for an if with multiple conditionals
Order of logical OR execution in C
关于c - printf优先于|| &&在其中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37063523/
10-11 00:26