与“&&”混淆和“||”

时间:2014-02-10 08:19:35

标签: java c++

案例1和其他两种情况有什么区别?
案例1:false && false || true
案例2:(false && false) || true
案例3:false && ( false || true )

4 个答案:

答案 0 :(得分:8)

&&的优先级高于||,因此案例1等同于案例2。

请参阅:http://en.cppreference.com/w/cpp/language/operator_precedence


实际上,案例1和案例2是等效的表达式,但是可能存在表达式树本身不同的情况,例如:

true ==  false && false  || true  // A
true == (false && false) || true  // B
// not the same!

这里他们读作:

((true ==  false) && false)  || true  // A
 (true == (false  && false)) || true  // B

因为==的优先级高于&&

答案 1 :(得分:1)

&&boolean algebra中注明了{p> *||注明了+。读它here

C / C ++运算符优先级通常来自数学优先级。

答案 2 :(得分:0)

Case 1 : false && false || true => true
Case 2 : (false && false) || true => true
Case 3 : false && ( false || true ) => false

括号中的操作应始终在其他操作之前执行。

case 2 : (false && false) || true => false || true => true

case 3 : false && ( false || true ) => false && true => false

case 1 : false && false || true => false || true => true

答案 3 :(得分:0)

对于案例3,短路评估会在&&和& amp;&被忽略。

Short-circuit_evaluation