大学C语言问题 执行“int a,b,c;a=b=c=1;--b&&++c||++a;"后,变量a

Python015

大学C语言问题 执行“int a,b,c;a=b=c=1;--b&&++c||++a;"后,变量a,第1张

首先你要把整个结构弄清楚,&&的优先级高于||,所以上面的式子等价于(--b&&++c)||(++a),

先看(--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

1

a=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

&&级别高于||

这个逻辑表达式中不是严格按运算符优先级计算的,只要左边可以计算出逻辑表达式的值,后面的不再运算