短路求值实现逻辑

为了实现逻辑和返回真实,两个操作数必须评估为真。如果第一个操作数计算为错误的,逻辑的,知道它必须返回错误,无论第二个操作数是否计算为真或假。在这种情况下,逻辑和运算符将继续进行,并立即返回错误,甚至没有评估第二个操作数!这被称为短路评估,它主要是为了优化的目的。
同样,如果第一个操作数为逻辑或是真的,那么整个或条件必须评估为真,第二个操作数不需要被评估。
短路评估提出了另一个机会,以显示为什么运营商,导致的副作用不应该被使用在复合表达式。考虑下面的代码片断:


如果(X = = = 1 & Y + + = = 2)
做某事
如果X不等于1,有条件的必须是假的,所以Y + +永远不会得到评价!因此,Y只会递增,如果x的值为1,这可能不是程序员想要的!
与逻辑或运算,新程序员有时混淆逻辑与运算符(&&)与按位AND运算符(&)。
混合和ORs
混合逻辑和逻辑或运算符在相同的表达往往是不能避免的,但它是一个充满潜在危险的区域。
许多程序员认为,逻辑和逻辑或具有相同的优先级(或忘记,他们不这样做),就像加法/减法和乘法/除法做的一样。然而,逻辑与逻辑或具有更高的优先级,因此逻辑和运营商将评估在逻辑或运算符(除非他们已经括号)。
因此,新的程序员会经常写表达式如value1 value2和3 | |。因为逻辑和具有更高的优先级,这种评估为value1 | |(2和3)(value1 value2,不| |)和3。希望这是程序员想要的!如果程序员假设左到右的评价(如发生与加法/减法,或乘法/除法),程序员将得到一个结果,他或她没有期待!
当混合逻辑与和逻辑或同一种表达,它是一个好主意,明确每个运算符和操作数括号。这有助于防止优先错误,使您的代码更容易阅读,并清楚地定义了如何使用表达式来评估。例如,而不是写在| |值value1 value2和珍惜,最好写(value1、value2)| |(3和珍惜)。
De Morgan定律
许多程序员也犯了这样的错误!(X和Y)是同一件事!和及!不幸的是,你不能“分配”的逻辑,而不是以那种方式。
De Morgan定律告诉我们,在这种情况下,逻辑上的不应该是如何分布的:
!(X和Y)相当于!X | |!Y
!(X | | Y)相当于!和及!Y
换句话说,当你分配逻辑不,你也需要翻转逻辑和逻辑或,反之亦然!

这有时可能是有用的,当试图弥补复杂的表达式更容易阅读。


其中的逻辑异或(XOR)操作?

逻辑异或是一个逻辑运算符,在一些语言中,用于测试是否奇数是真的提供了条件。

C++并没有提供一个逻辑异或操作。不同于逻辑或逻辑与、异或不能短路计算。因此,进行异或操作的逻辑或逻辑和运营商的挑战。然而,你可以很容易地模仿逻辑异或使用不等于操作符(!=):

如果(一个!= B)…/ /一个异或B,假设A和B是布尔值
这可以扩展到多个操作数如下:

如果(一个!= B!= C!= D)…/ /一个异或XOR异或B C D,假设,B,C,和D的布尔值
注意上面的XOR模式只工作,如果操作数是布尔型(非整数)。如果你想要这个工作的整数,你可以static_cast他们的书。
如果你需要一个形式,与非布尔异或操作数,你可以使用这个稍微复杂的形式:

如果(static_cast <布尔>(一)!= static_cast <布尔>(B)!= static_cast <布尔>(C)!= static_cast <布尔>(D))…/ /一个异或XOR异或B C D,任何可转换为bool类型
在这种形式中,逻辑不是运算符用来将操作数转换为一个逆布尔值。然而,异或计算同样的方式时,所有的操作数都倒了,所以这并不影响结果。
测验
评估以下:
(1)真正的和真实的)| |假
(2)假和真)| |真实
(3)假和真)| |假| |真实
(4)5>6 | | 4 > 3)和(7 - 8)
5)!(7>6 | | 3>4)
测验的答案
注:在下面的答案中,我们“解释我们的工作”,通过向你展示的步骤,以获得最终的答案。步骤是用一个= >符号分开的。例如“(真| |假)= >真”意味着我们评估”(真| |假)”到“真实”的价值。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值