int a=1,b=2,c=3,d=4,m=2,n=2;
(m=a>b)&&(n=c>d)
题目是执行下面的那个表达式,问最后n的值,答案为2。但是它下面不是应该先比较再赋值吗,怎么n的值不变呀?
int a=1,b=2,c=3,d=4,m=2,n=2;
(m=a>b)&&(n=c>d)
n最后的值为2
先计算a>b,不成立,值为0,将0赋值给m,m=0,表达式m=a>b的值也是0。
对于&&逻辑运算,不管后面(n=c>d)的值如何,都不影响(m=a>b)&&(n=c>d)的最终结果,所以就是说,C语言不再对表达式n=c>d进行计算,n的值没有改变,n还是2。
希望对题主有所帮助,望采纳!!
逻辑运算符短路现象,m=a>b为假就不会再执行后面的运算了
没开始我看这个是运算优先问题,关系运算符的高于逻辑算符,我刚开始和楼主想的一样,为什么n还是等于二?因为你在第一行代码中直接给m,n赋值,可以说你的第二行表达式根本没用上,其实你显示的是原来的值,进行与运算结果只能是0和1