C语言短路运算符的语句判定逻辑及代码运行结果疑问
C语言短路运算符与优先级的执行逻辑解析
先看你贴的代码:
int main() { int a=5,b=8,c=0,d=1; printf("%d\n",(a+b)%d&&d++||c++); printf("%d %d",c,d); return 0; }
你纠结的点是优先级和短路逻辑的结合,这里一步步拆明白:
- 首先明确:C语言里
&&的优先级确实比||高,所以表达式(a+b)%d&&d++||c++会被强制分组成((a+b)%d && d++) || c++,这部分你的判断没错。 - 然后按短路规则逐步执行:
- 先算
(a+b)%d:5+8=13,d=1,13模1的结果是0(逻辑假)。 - 执行
&&运算:因为左侧是0(假),短路规则直接生效,右侧的d++根本不会运行,d的值保持1不变。此时(a+b)%d && d++的整体结果是0。 - 执行
||运算:左侧结果是0(假),没法直接得出整个表达式的结果,所以必须执行右侧的c++,c从0变成1,整个||表达式的结果是1(逻辑真)。
- 先算
所以程序最终输出是:
1 1 1
内容的提问来源于stack exchange,提问作者VT G
相关产品推荐
相关产品推荐

