C语言&&和||的运算方法

#include <stdio.h>
main()
{ int a=1,b=2,c=3,d=4;
if ((a=2) || (b=1)) c=2;
if ((c==3) && (d=-1)) a=5;
printf("%d,%d,%d,%d\n", a,b,c,d);
}
答案为:2224
这个为什么执行a=2,没执行b=1

或运算||,从最坐边一个开始判断,只要遇到第一个为真,后面的就不再执行
if((a=2)||(b=1)) c=2;
将2赋给a,a=2≠0,直接得到(a=2)||(b=1)为真,后面的b=1不再执行。追问

前面的为真 后面的不执行
若果后面的为真 那前面的不执行吗

追答

从最左边第一个开始判断,从左至右,所以不会出现你所说的情况。

追问

额,好吧谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-06-30
这个叫做C语言中的短路现象,出现在&&和||中
因为a=2的值是真,所以(a=2)||(b=1)必为真,这个时候计算机就偷了个懒就不运行b=1喽。追问

谢谢

追答

没事

相似回答