c语言短路运算问题 求助大佬

求助这个题的详解

因为a,b,c都等于0,a++是先运算后自增,所以a++与++b或c++等于0与++b或c++

又因为逻辑运算短路(也就是当0与任何表达式时,将不进行后面的表达式计算,直接得出结果为0,

当1或任何表达式时,将不进行后面的表达式计算,直接得出结果为1)所以++b被跳过,没有执行,

因此a++与++b或c++的表达式的值等于0与++b或0等于0,因为a++和c++执行运算后自增1,

所以执行a++与++b或c++表达式后a=1,c=1,++b因为没有被执行所以b仍然为初始值0.

验证程序如下

追问

++b那里跳过那个没懂

追答

因为0与0=0,0与1=0,所以如果A=0,A与B,不管B是0还是1,结果都为0.
因此当0与B时,程序会不执行B的运算(跳过B)
同样的,当A=1,A或B时,因为1或0=1,1或1=1,
所以程序会同样不执行B的运算(跳过B).

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-11-17
先说答案,a=1,b=0,c=0
解析:&&和||有短路逻辑的特性,即运算符左边条件为假的情况下,不检查右边的条件(也不执行);前置++是先加1,再执行所在代码;后置++是先执行所在代码,再加1。
那么结合上述内容来解题目
1、先看a++运算,a=0,所以该表达式为假,值为0,再对a进行加1运算,所以a=1;
2、再看&&运算,左边表达式为假,所以后面的都不看了,代码不执行。则b=c=0。
相似回答