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?它看起来并不好看。
答案 0 :(得分:0)
在逻辑OR中如果第一个条件为真意味着它不会评估第二个条件!但在逻辑和第一个条件中,错误意味着它不会评估第二个!
if ((local != -1) || (fall_back == 1))
如果其中任何一个条件为真,local != -1
或fall_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 = 0
和fall_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
然后在第一种情况下结果将为真,在第二种情况下结果将为假。