首先,根据逻辑符号优先级,公式改写成:(a++&&b++)||c++。
然后,用a在“++”之前的值作为(a++)这个表达式的结果返回,即0,被转换成逻辑假,这时a变成1了,但是a++表达式的结果是0。因此根据“&&”的短路径求值原则,(a++&&b++)中的表达式b++不会求值,即b仍然是0,表达式(a++&&b++)结果为逻辑假。
最后,根据“||”多路径求值原则,左边表达式逻辑假,故而对表达式c++求值,故而c的值变成1。
最终结果是:a=1,b=0,c=1.
结果是
a=1,b=0,c=1
&&的优先级比||高,先做a++&&b++
a++返回a当前的值0, a++为假,那么a++&&b++就必然为假,于是b++就没必要执行,被忽略,然后求0||c++, 于是c++被执行
综上就是a++和c++被执行, b++被忽略
最终a=1,b=0,c=1
a = 1, b = 0, c = 1
语句中a,b,c都是后自加, 所以是先进行表达式的运算, 再进行后自加, a++ && b++这部分时, a=0, 所以会发生短路, 不会执行b++,整个a++&&b++都为假 然后会执行判断c++的值,
过程中只会对a和c进行后自加运算, 所以a和c为1, b=0