合并if语句中的条件

时间:2014-08-22 05:19:43

标签: logical-operators boolean-expression

if语句有两个条件。我发现那些不同,但我不知道原因。

1: if ((local != -1) || (fall_back == 1))
2. if ((local != -1) || ((local != -1) && (fall_back == 1)))

这两者是不同的。但在数学方面,我们有A V (B ^ C) = (A V B) ^ (A V C)。如果我使用这个等式并重新组织陈述2,它似乎与1相同。我缺少什么基本的东西? 如何简化声明2?它看起来并不好看。

4 个答案:

答案 0 :(得分:0)

在逻辑OR中如果第一个条件为真意味着它不会评估第二个条件!但在逻辑和第一个条件中,错误意味着它不会评估第二个!

if ((local != -1) || (fall_back == 1))

如果其中任何一个条件为真,local != -1fall_back == 1它将评估if的正文。

if ((local != -1) || ((local != -1) && (fall_back == 1)))

但是这两个都应该是真的,然后只会评估表达式。否则local != -1失败意味着,两个条件都将失败。因为逻辑AND(&&)都应该是真的!

考虑 - local != -1为假,fall_back == 1为真

if ( false || true ) -> if(0 || 1) -->true

if ( false || (false && true)) -> if(0 || (0 && 1)) -> if(0 || 0) --> false

答案 1 :(得分:0)

进行短路评估以优化。 因此,在(A!=B) || (A!=C)这样的表达式中,如果A!=B变为真,则第二部分A!=C根本不会被评估,因为独立于第二部分,表达式将变为真。

答案 2 :(得分:0)

考虑

A -> local != -1
B -> fall_back == 1

你的第一个病情减少到

A V B

第二个声明缩减为

A V (A ^ B)  =>  A ^ (1 V B)  => A

因此,您的第一个陈述要求条件A或B为真 第二个语句仅在A为真时进行测试

考虑local = 0fall_back = 1

的测试用例
Statement 1 => True as fall_back == 1
Statement 2 => False as local != 0

因此条件不一样

答案 3 :(得分:0)

这很简单,如果你取local != -1 = true而fall_back == 1 = false 然后在两种情况下,结果都将为真,因为local != -1 = true

的值

但是如果local != -1 = false且fall_back == 1 = true 然后在第一种情况下结果将为真,在第二种情况下结果将为假。