这个如图,很疑惑,求告知

为什么这个b--是要变成19了不是b在前先赋值吗,但是那个c++为什么又不会变成31而是30啊,还有那个d为1,是怎么回事啊,这个是c语言的,烦请告知,谢谢

img

或运算前面只要有真的,后面就不执行

++a<=10,即a先加一,然后判断,很明显,11小于等于10不成立,所以要接着往后看。

b-->=20,这个是b先和20比较,很明显,20大于等于20,所以这个表达式为真,然后b的值减一,此时,这整个表达式已经运算结束了,因为这是 || 运算,只要前面有一个为真,它的结果就已经是真了,不会再计算后面的,因此,它不会计算后面的C++
所以最终b的值是19,C的值不变。
有帮助的话采纳一下哦!

b变19很正常,因为b参与完表达式运算后,就自减了,所以到输出时,b变成了19.
c为什么不是31,是因为这行代码根本就没运行。逻辑或运算,只要有前面部分为true,后面的都不执行。
d为1是因为这是关系运算的结果。C语言没有bool类型,用0表示false,非0(默认是1)表示true

我一步一步帮你分析一下 d = ++a<=10 || b-->=20 || c++;

  1. 先判断++a<=10,++a先自增再参与求值,所以a自增后是11,11<=10为false,继续判断下一个表达式
  2. b-->=20,b--先参与求值再自减,所以b=20>=20为true,所以整个表达式为true,后面的c++不会被执行
  3. 整个表达式的结果为true,所以将1赋给了d。