求学霸们为学渣解答C语言 这个答案是不是错了

img

这个答案是不是错了哇,为什么解析中的a就变成了2呢?不是很理解

因为题目中是a=2,赋值语句,所以a就是2啦。,你以为是a==2啊

img

a=2 || 短路 成立一个就后面的就不管了 c=2
if c==3 不成立

&& 是双目逻辑与运算,意为同时都要满足。对于&&运算,两边的表达式只要有一个为假,结果就为假。左表达式 && 右表达式 运算时,如果左表达式为假,那么对于&&运算来说,最后的结果肯定都是假了,所以计算机就偷个懒, 后面的右表达式就不执行了,也就是平常讲的短路现象。|| 双目或运算也是有短路现象的, || 运算是只要其中一个为真,结果就为真,当 左表达式=1 || 右表达式=0 或 =1 时,|| 运算的结果都为真,所以此时右表达式也不被执行到。

if ((a=2) || (b=1)) c=2; //依据上面的 || 运算原则,(a=2) !=0 即为真,真 || 右边表达式短路,if(1)条件满足,
//这句执行完,a = 2, b = 2, c = 2.
if ((c == 3) && (d=-1)) a=5;//经上一步,c=2, 判断 c == 3 为假即为 0 ,0 && 右表达式短路,if(0)条件不满足
//所以这句没有被执行, d = 4, a = 2。
//所以最终输出:a = 2, b = 2, c = 2, d = 4.