C语言中表达式1 | | (表达式2) &&表达式3 为什么先执行表达式1?

C语言中表达式1 | | (表达式2) &&表达式3 为什么先执行表达式1
2024-11-29 15:14:04
推荐回答(4个)
回答1:

按照C语言优先级, A || B && C相当于A || (B && C), 所以你可能默认了先执行B && C.
但是需要注意C语言的标准采用逻辑表达式短路求值: 对于d=X||Y, 如果X成立则不执行Y而直接得到d=1; 对于d=X&&Y若X不成立同样跳过Y直接得到d=0.
在你的例子里 A || (B && C) 先得到了A成立, 所以就跳过了余下的表达式.

回答2:

||是C语言“逻辑或”操作符,A||B||C,它的执行顺序就是从左到右,当其中一个为真的时候,就不会执行后面的语句了,比如若A=1的话,B和C的都不会执行

回答3:

根据运算符优先级A || B && C等效于A || (B && C)
即表达式整体是一个||表达式
||运算符是顺序点,要求先求左表达式值,若左表达式为0(假),在进行右表达式求值;脱左表达式值为非零(真),则右表达式不进行求值,表达式整体值为真(1)

回答4:

d = c-- || (b=6) && a++; 等价于 d = c-- || ( (b=6) && a++ );
这把表达式就相当于 给了一个右边为真的逻辑或; 然后判断逻辑或左边是否为真;左边为真即整个表达式为真,右边的算术和赋值都不会再执行了;