学一年算法 2021-11-06 23:57 采纳率: 66.7%
浏览 47
已结题

C语言的与短路和或断路问题

本来想试一下C语言的与短路和或断路现象的,但是我用vs2019测试的的时候,发现与短路没发生,是怎么回事。还是我理解错了?求指点

img

#include<stdio.h>
int main()
{
    int x, y, z;
    x = y = z = -1;
    ++x&& ++y || ++z;//本以为会与短路的,但结果非我所想
    printf("%d %d %d\n", x, y, z);
    x = y = z = -2;
    ++x|| ++y && ++z;
    printf("%d %d %d\n", x, y, z);

    return 0;
}

口算结果是:
0 -1 -1
-1 -2 -2
编译器结果:
0 -1 0
-1 -2 -2

  • 写回答

2条回答 默认 最新

  • 关注

    &&和||的短路特性。
    逻辑运算的工作原理是:

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

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


    因为&&的优先级高于||
    ++x && ++y || ++z; 等于 (++x && ++y) || ++z;
    是先判断++x && ++y
    ++x是0,0为假 返回0 不执行 ++y
    之后判断 0 || ++z;
    0为假 执行 ++z
    所以只有++y被短路跳过不执行


    第二个
    ++x || ++y && ++z; 等于 ++x || (++y && ++z);
    ++x是-1,-1为真 后面的++y && ++z就都不执行了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月6日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。