C语言逻辑语言运算顺序

2024-11-29 17:03:23
推荐回答(3个)
回答1:

a=(m=a>b)&&(n=c>d)||++a==b--;
首先是
m=a>b,a>b为假,所以m=0.

&&是有一个是0就是假,||是有一个为1就为1,
所以不短路的条件都看运算符前的,
如果&&前是0,不运算后面,结果必为0;
如果||前是1,不运算后面,结果必为1。

所以(m=a>b)&&(n=c>d)前面的是0,所以必为假,因此)(n=c>d)就不用看了,也不计算,n的结果也没改变,还是6。(m=a>b)&&(n=c>d)结果就是0.
变成 0 ||++a==b--;
所以要看后面的,a,b之前值没改,所以++a是2,b--是先赋值后减,所以赋值时还是2.
所以++a==b-- 结果是1.然后赋值给a,因此a=1,b因为前面自减,所以赋值2自减的结果是1,所以b=1。

结果 1 1 0 6

满意就采取最佳答案吧!

回答2:

a=2,b=1,m=5,n=6;
(m=a>b)&&(n=c>d)||++a==b--;这个表达式可是(m=a>b)&&(n=c>d)结合,可以看成一个整体,于是乎这个表达式就是p||q的情况,应先看q部分而q就是++a==b--;
经过判断可知这句话是真的,所以整个表达式(m=a>b)&&(n=c>d)||++a==b--;
就是真的,p部分不需要判断了,除了a和b之外其他值都不变!!!

运算规则:
a&&b:如果a为假,整个表达式就是假,就不执行b了,
a||b如果a为真整个表达式就是真,就不在执行b了
只要记住这两句话,任何此类的题都会做了,但是要多加练习!!

回答3:

1 1 0 6