关于|| &&的运算规则有关问题-小妹儿
关于|| &&的运算规则问题---小妹儿
To All:
小妹知道当出现|| &&时运算从左至右。
但是下面题的结果。
请大家解释下谢谢。。
Q1.int _tmain(int argc, _TCHAR* argv[])
{
if( 1 || 0 && 0)
{
cout<<"1"<<endl;
} else {
cout<<"0"<<endl;
}
return 0;
}
Q2.int _tmain(int argc, _TCHAR* argv[])
{
if( (1 || 0) && 0)
{
cout<<"1"<<endl;
} else {
cout<<"0"<<endl;
}
return 0;
}
Q1 为什么是 1
Q2 为什么是 0
Q1 和 Q2的运算顺序应该一样呀?(小妹儿认为)。
谢谢。。
------解决方案--------------------
用女的头像,或者,自称“小女子”等等....总是有很多人热情地回答。而同等情况下,男的提问,就没那么多踊跃的回答了。
为了本帖子,不违规,回答LZ的问题,
&&,|| 求值是,Short-circuit 。
------解决方案--------------------
Q1、(1 || 0 && 0)——1就决定了表达式为真了,后面都不再计算。
Q2、((1 || 0) && 0)——1使得前面的条件表达式为真,但因为&&的原因,整个表达式要为真还得要&&之后也为真才行。所以,表达式返回假。
&&算符的优先级高于||,所以第一个表达式相当于:1 || (0 && 0),所以只要最前面为真了,后面就不必再计算了。
而第二个表达式(1 || 0) && 0则因括号的原因使得整个表达式的值要看&&的结果,后果你已经看到了。
------解决方案--------------------
逻辑运算具有短路规则,当能够确定当前的逻辑值时,不会运算后面的了。
if( 1 || 0 && 0)当解析到1时就不需要知道后面的了,因为这个比然是1;
if( (1 || 0) && 0)解析的时候先是解析到1,但是后面的&&导致了必定要分析后面的0.如果前面是0,那么后面的就不要分析
------解决方案--------------------
http://en.cppreference.com/w/cpp/language/operator_precedence
To All:
小妹知道当出现|| &&时运算从左至右。
但是下面题的结果。
请大家解释下谢谢。。
Q1.int _tmain(int argc, _TCHAR* argv[])
{
if( 1 || 0 && 0)
{
cout<<"1"<<endl;
} else {
cout<<"0"<<endl;
}
return 0;
}
Q2.int _tmain(int argc, _TCHAR* argv[])
{
if( (1 || 0) && 0)
{
cout<<"1"<<endl;
} else {
cout<<"0"<<endl;
}
return 0;
}
Q1 为什么是 1
Q2 为什么是 0
Q1 和 Q2的运算顺序应该一样呀?(小妹儿认为)。
谢谢。。
------解决方案--------------------
用女的头像,或者,自称“小女子”等等....总是有很多人热情地回答。而同等情况下,男的提问,就没那么多踊跃的回答了。
为了本帖子,不违规,回答LZ的问题,
&&,|| 求值是,Short-circuit 。
------解决方案--------------------
Q1、(1 || 0 && 0)——1就决定了表达式为真了,后面都不再计算。
Q2、((1 || 0) && 0)——1使得前面的条件表达式为真,但因为&&的原因,整个表达式要为真还得要&&之后也为真才行。所以,表达式返回假。
&&算符的优先级高于||,所以第一个表达式相当于:1 || (0 && 0),所以只要最前面为真了,后面就不必再计算了。
而第二个表达式(1 || 0) && 0则因括号的原因使得整个表达式的值要看&&的结果,后果你已经看到了。
------解决方案--------------------
逻辑运算具有短路规则,当能够确定当前的逻辑值时,不会运算后面的了。
if( 1 || 0 && 0)当解析到1时就不需要知道后面的了,因为这个比然是1;
if( (1 || 0) && 0)解析的时候先是解析到1,但是后面的&&导致了必定要分析后面的0.如果前面是0,那么后面的就不要分析
------解决方案--------------------
http://en.cppreference.com/w/cpp/language/operator_precedence