关于不理解逻辑运算的问题

main()
{
    int x,y,z;
    x=y=z=-1;
    printf("%d%d%d",x,y,z);
    ++y&&++x||++z;
    printf("%d%d%d",x,y,z);
}

为什么第二次打印x还是-1呢

++y&&++x||++z;

  1. 这个表达式先执行++y&&++x
  2. 同时满足true才返回true,但是++y是0所以不会执行后边的++x
  3. 也就是说:++y&&++x这句执行完成,y=0,x=-1(x不变)
  4. 再执行 0 || ++z(||表示只要有个true,就返回true,不执行后边代码)
  5. 由于前边执行返回0,是false,所以执行后边++z,最后z=0
  6. 最后printf("%d%d%d",x,y,z)输出-1,0,0

这里涉及到逻辑运算的优化问题,比如x||y ,如果x是1,将不会去管y的值,也就是说,y如果是个表达式将不会计算
同样,对于x&&y ,如果x是0,不会再去管y的值,
所以这里面,先算++y&&++x,++y是0,所以逻辑&&的值一定是0,你会计算++x,x的值自然不会更新

你需要先了解优先级