验证工程师经常犯的错误(3)---逻辑短路问题

大多数编程语言都有所谓的逻辑短路设定。

就是说,在条件判断的时候,如果“逻辑或”表达式第一项已经为真,就不会再判断第二项是否真假。

同理,如果“逻辑与”表达式的第一项已经为假,就不会再判断第二项是否真假。

条件判断的逻辑短路,有点像初中物理学的电路短路问题。

如图所示,开关合上的时候,灯炮不会亮。只有开关断开,灯泡才亮。

Image

举个编程的例子:

if(a==5 || b == 5)跟 if(a==5 || (a != 5 && b == 5))是完全等价的;

后者很啰嗦,因为只有a==5判定为假,才会继续判断 b==5 的真假,所以这里完全不必再判断一次 a != 5 。

那么问题来了,if(a == 5 || b == 5)能否写成 if(b==5 || a == 5)呢?

答案是否定的。

Image

Image

如果美国现任总统因为肺炎挂了,那么谁来主持大局呢?

if(a==5 || b==5)可以理解成现任总统健在(a==5),就由他主持大局;

现任总统挂了(a != 5)才会去看副总统是否健在 (b == 5),然后由副总统主持大局。

也就是说,副总统其实就是个备胎。只要总统健在,副总统哪凉快哪待着去。

所以if(b==5 || a ==5)跟 if(a == 5 || b == 5)是完全不同的含义。

来源| 杰瑞IC验证(ID:Jerry_IC)

|原创作者| Q哥

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值