我无法理解为什么以下代码部分返回x而不是b。
#include <iostream>
using namespace std;
int main()
{
int x = 12;
int a = 1;
int b = 0;
cout << "answer: " << (x < a && 1 ? a : (x > b && 0 ? b : x)) << endl;
return 0;
}
我的工作是:
x不低于[逻辑和] 1,移动到第二组括号。
x大于0 [logival和] 0,因此结果应该是&#39; b&#39;。
(因为两个语句都等于true,不应该将Result_if_true语句作为输出吗?)
答案 0 :(得分:1)
x > b && 0
不意味着&#34; x大于b和0&#34;。
相反,它意味着:&#34; x大于b,0是真实的陈述&#34;。 &&
运算符是连接两个语句的逻辑AND。你不能以松散的方式使用它,而#34;和&#34;用于自然语言。
答案 1 :(得分:1)
(x < a && 1 ? a : (x > b && 0 ? b : x))
被解析为
((x < a) && 1) ? a : (((x > b) && 0) ? b : x)
与
相同(false && true) ? a : ((true && false) ? b : x)
即
false ? a : (false ? b : x)
即
x
答案 2 :(得分:0)
在此表达式中
(x < a && 1 ? a : (x > b && 0 ? b : x))
首先是评估条件
x < a && 1
它等于false
,因为x不小于a。
所以下一个要评估的表达式是
(x > b && 0 ? b : x)
在此表达式条件
中x > b && 0
显然等于false
因此整个表达式的值将是子表达式的值
x
并且会出现
answer: 12
你的逻辑错误是表达
x > b && 0
不等于
( x > b ) && ( x > 0 )
等同于
( x > b ) && ( 0 )
作为表达
( 0 )
等于false
然后
( x > b ) && ( 0 )
等于false