逻辑或 “||“ 的“短路”特性(大学生例题讲解)也有&&短路特性的讲解

先放例题

在这里插入图片描述
答案选C

首先我们要明白

A||B为真,即A、B至少一个为真(即记为1,同理假记为0)
A&&B为真,即A、B都为真(即记为1,同理假记为0)
1和0,对应真假这个是离散数学里面定义的,C语言也适用。

由题j++| | k++即,1 | | 2由于两边都不同时为0,即判断为真,记为1,同时“或”逻辑前面为1发生短路
化简后原式等于 1 && i++,即1 && 1,由于同时不为0,所以判断为真,记为1,且“与”逻辑前面不为0,就不会发生短路

补充说明 自加自减的运算规则(++a, --a, a++, a–)

得到if(1),所以输出printf("%d,%d,%d\n",j,k);

好的难点来了,仔细听

按理说三个都进行自加输出应该是 2,2,3

但是考虑到 | | 的短路特性,k被短路,所以得到结果是2,2,2

总结:

  1. 多层嵌套里的右侧数值不发生变化
  2. “或”逻辑前面为1(不为0即可),“与”逻辑前面为0就会发生短路
  3. 即根据左边已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省一定的性能。

附赠几道例题,用来细品

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图片引自海南大学上课课件

图一
图一是 || 前不为1所以++b&&++c没有被短路,再看++b&&++c,&&前不为0,也没有短路

在这里插入图片描述
图二是 || 前为1所以++b&&++c被短路
在这里插入图片描述
图三是 || 前为1所以++b&&++c被短路

在这里插入图片描述
图四是 || 前不为1所以++b&&++c没有被短路,再看++b&&++c,&&前为0,则c被短路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳城S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值