有条件的运算符错误
问题描述:
我无法理解为什么下面的代码段返回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 NOT下,移动到第二组括号。
-
x大于0 [logival和] 0,因此结果应该是'b'。
(既是声明等同于真实的,不应该Result_if_true说法是输出?)
答
x > b && 0
不不意味着 “x大于b和0大”。
取而代之的是:“x大于b,0是真实的陈述”。 &&
运算符是连接两个语句的逻辑AND。你不能以松散的方式在自然语言中使用“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
+0
完美,谢谢你清理这个。 – Cirrus 2014-11-05 04:59:42
答
在这个表达式中
(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
会有outputed
answer: 12
你的逻辑错误在于表达
x > b && 0
不等同于
(x > b) && (x > 0)
它相当于
(x > b) && (0)
作为表达
(0)
等于false
然后和
(x > b) && (0)
等于false
'X> b && 0'装置'(X> B)&&(的static_cast (0))',而不是'(x> b)&&(x> 0)'。 –
chris
2014-11-05 04:54:24
因此,因为布尔值== 0,等于false。 逻辑T和F = F因此返回result_if_false? – Cirrus 2014-11-05 04:58:27
是的,这是正确的。 – chris 2014-11-05 05:10:37