令a=0,b=0,执行a++&&b++,运行结果为a=1,b=0,为什么?


#include <iostream>
#include <stdio.h>

int main(int argc, char** argv) 
{
    int a=0,b=0;
    a++&&b++;
    printf("%d %d",a,b);
    return 0;
}

因为a++时,a还是0,要整个表达式结束后a才加1。&&操作符如果左侧为0,右侧就不计算了,所以b还是0。最终结果a=1,b=0

逻辑运算的工作原理是:

表达式A && 表达式B :
如果A的值为假就返回A的值并且不执行表达式B,否则执行表达式B并且返回B的值

表达式A || 表达式B :
如果A的值为真就返回A的值并且不执行表达式B,否则执行表达式B并且返回B的值

a++ 是先返回判断原本的值0 再对a加1
0为假,非0为真,

所以 a++&&b++; 是就直接返回0, &&后的 b++ 不会执行

由于短路与&&前面是假,后面不会执行,也就只执行了a++