-5
int a = 2, b = 3, c = 5, d = 4, e = 1;

if ((a = b > c ? d : e) == e) a++;

答案是 a=2

我不明白这实际上在做什么。

你能帮我逐步弄清楚这段代码的作用吗?

4

6 回答 6

6
if ((a = b > c ? d : e) == e) a++;

等于:

if (b > c)
    a = d;
else
    a = e;
if (a == e)
    a++;

也看看:什么是'?用 C++ 做?

于 2013-05-09T17:28:36.000 回答
2

要了解您必须组合 if 条件。

如果 ((a = b > c ? d : e) == e) a++;

首先有一个任务

a = b > c ? d : e

它说:如果 b > c 则 a = d,否则 a = e

在这种情况下 3 > 5 是假的,所以

a = e 所以 a = 1

然后有另一个评价

如果(a==e)a++;

在这种情况下 a = e = 1 所以它 a++ -> a = 2

我希望它有帮助;)

于 2013-05-09T17:39:32.090 回答
1
int a = 2, b = 3, c = 5, d = 4, e = 1;

if ( (a = ( (b > c) ? d : e )) == e ) a++;
  1. b > c返回false
  2. false ? d : e返回e这是1
  3. a = 1分配和1返回aa
  4. 1 == etrue
  5. if (true) a++;递增a_1

所以最后a等于2

于 2013-05-09T17:34:45.567 回答
0

我认为这是你想知道的主要地点

一种 ?b : c 称为条件运算符,表示如果 a 为真则使用 b,否则使用 c。

(a = b> c? d : e) 

就等于

if(b>c)
  a = d;
else 
  a = e;
于 2013-05-09T17:29:06.867 回答
0

首先,所谓的三元运算符(带有 ? 标记)检查条件 ( b>c):

a= b > c ? d : e

并将值分配e给变量a(因为条件失败,它采用了第二个选项),所以,a=1

然后它检查变量a是否相等e(它是true)并相应地将变量增加a1,所以它变成了2

注意:看起来对您来说最关键的部分是学习C 中的三元运算符和运算优先级。

于 2013-05-09T17:33:36.587 回答
0

起初,如果我们在这段代码执行后查看变量,看起来并没有发生太多事情。但这是真的吗?

好吧,LiHo 已经展示了对此的分解以及它如何“转换”为更易于阅读的代码,并且使用他的代码,应该很容易看到正在发生的事情。但只是为了好玩,让我们分解那个东西并根据我们得到的数字来运行它,好吗?

if ((a = b > c ? d : e) == e) a++;

这是以下形式:

if(<something> == e) a++;

我们知道这意味着什么。所以,让我们专注于<something>部分:

(a = b > c ? d : e)

查看C++ 运算符优先级列表,我们看到三元运算符 ( ?:) 的排名高于 ,=因此它将首先评估:

b > c ? d : e

这是一个美化的if陈述:“如果b大于c则返回d,否则返回e。我们有两个b和的值c,我们也知道3不大于5。所以,我们知道这个语句将返回e

所以现在,我们稍微简化了表达式:

(a = e)

这是一个任务。它设置a为等于e。现在,我们将退出以获取更多上下文:

if((a = e) == e) a++;

这里发生的是,操作(a = e)执行之后,它给我们返回了一个结果。方便地,该结果是赋值a 的值。因此,我们有这个:

if(a == e) a++;

由于我们已设置a为等于e(即等于1),因此if将执行a++并将a1增加到2

因此,虽然看起来什么都没有发生,但实际上,我们已经做了很多工作。

于 2013-05-09T18:01:19.763 回答