学一年算法 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 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助