先看(--b&&++c),--b导致b的值为0,所以(--b&&++c)必然为假,所以c就不会加一了,C的值还是1。然后(--b&&++c)为假并不能直接断定(--b&&++c)||(++a)的真假,因为||需要两边为假才是假,所以需要判断右边的(++a),这里a自加一次变为2,(++a)为真,整个表达式(--b&&++c)||(++a)的值为真。最后a,b,c的值分别是2,0,1
1a=b=c=1++a||++b&&++c执行后输出a,b,c分别是2
1
1。
2
++a||++b&&++c这个语句只会执行++a,++b&&++c不会执行。C语言在做||运算时,如果第一个操作数++a为真(非零),直接返回真,而不计算第二个操作数++b&&++c。
首先执行++a,a变成2,++a表达式的值也是2,为逻辑真,于是逻辑或||右边的不再计算这样执行后a=2,b=1, c = 1
&&级别高于||
这个逻辑表达式中不是严格按运算符优先级计算的,只要左边可以计算出逻辑表达式的值,后面的不再运算