逻辑与 逻辑或 c = a++ || b-- && c;为啥b不自减


int main()
{
    int a = 1, b = 1, c = 0;
    c = a++ || b-- && c;
    printf("%d\n", b);
    return 0;
}

如代码, 看我这样认为对不对
c = a++ || b-- && c;
c=(a++ || b--)&& c;
c=1 && c;
也就是说&&前面的部分已经运算了,b--不应该运算结束了吗
我的问题是: b--为啥不运算?
为什么
c = a++ && b-- && c;//b=0
c = a++ || b-- && c;//b=1

你的解释不完全正确,错在 这里的解释 (a++ || b--)
计算(a++ || b--)时, ||前 的数 >=1 时,就不计算 ||右边的那个数 ,因此 b--没有参与运算

c = a++ && b-- && c;//b=0
先执行:a && b ,此时a=1,b=1, 1 && 1 = 1,a++ = 2, b-- =0, 再将 1 && 1 && c ,c=0, 1 && 1 && c =0
c = a++ || b-- && c;//b=1
先执行:a || b ,由于 a=1,b=1, 1 || 任何数 = 1, 所以在做或运算时,碰到第一个数是 1 时,它直接就取 1 当结果,不会去判断第二个数是什么值,所以这里 b-- 就被跳过了,然后再将 1 && c 去比较。

||和&&是逻辑运算符
|和&是算术运算符
这两个在运算上效果很类似,但逻辑运算符有短路特性,算术运算符没有
当进行&&运算时,其中一项是false,那么运算结束
当进行||运算时,其中一项是true,那么运算结束
a是1,a++返回值也是1,转换为bool是true,所以整个条件是true,c的值就是1了,后面不需要再运算

你采纳的答案里,有一处漏洞。