你能帮我分解一下这段代码实际上在做什么吗? if((a = b> c?d:e)== e)a ++;

时间:2013-05-09 17:25:28

标签: c++ c syntax ternary-operator

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

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

答案是a = 2

我不明白这是在做什么。

你能帮我弄清楚这段代码是一步一步做的吗?

6 个答案:

答案 0 :(得分:6)

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

等于:

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

另请参阅:What does '?' do in C++?

答案 1 :(得分:2)

要明白你必须要比较if条件。

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

然后还有另一个评估

if(a == e)a ++;

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

我希望它有所帮助;)

答案 2 :(得分: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
  3. 1
  4. a = 11分配给a并返回a
  5. 1 == etrue
  6. if (true) a++;a
  7. 递增1

    所以a最后等于2

答案 3 :(得分:0)

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

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

(a = b> c? d : e) 

等于

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

答案 4 :(得分:0)

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

a= b > c ? d : e

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

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

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

答案 5 :(得分:0)

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

嗯,LiHo已经展示了它的分解以及它如何“转换”为更容易阅读的代码并使用他的代码,应该很容易看到发生了什么。但是,为了好玩,让我们分解那个东西,并考虑到我们已经给出的数字,我们会这样做吗?

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

形式如下:

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

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

(a = b > c ? d : e)

查看C++ operator precedence list,我们看到三元运算符(?:)的排名高于=,因此首先会对其进行评估:

b > c ? d : e

这是一个荣耀的if声明:“如果b大于c,则返回d,否则返回e。我们有两个值bc我们也知道3不大于5。因此,我们知道此声明将返回e

所以现在,我们已经简化了一下表达式:

(a = e)

这是一项任务。它将a设置为等于e。现在,我们将退出以获得更多背景信息:

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

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

if(a == e) a++;

由于我们已将a设置为等于e(即等于1),if将执行,a++将增加a 1}}从12

因此,虽然似乎没有发生任何事情,但事实上,我们已经完成了很多的工作。