[英]Conditional operators error
我很难理解为什么以下代码部分返回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 IS大于0 [对数和] 0,因此结果应为'b'。
(由于两个语句都等于true,因此Result_if_true语句不应该作为输出吗?)
x > b && 0
并不意味着“x大于b和0大”。
相反,它的意思是:“ x大于b,0是真实的语句”。 &&
运算符是连接两个语句的逻辑AND。 您不能以自然语言使用“和”一词的宽松方式来使用它。
(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
在这个表达中
(x < a && 1 ? a : (x > b && 0 ? b : x))
首先有评估条件
x < a && 1
因为x不小于a,所以它等于false
。
因此,将要计算的下一个表达式是
(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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.