int a = 2, b = 3, c = 5, d = 4, e = 1;
if ((a = b > c ? d : e) == e) a++;
答案是a = 2
我不明白这是在做什么。
你能帮我弄清楚这段代码是一步一步做的吗?
答案 0 :(得分:6)
if ((a = b > c ? d : e) == e) a++;
等于:
if (b > c)
a = d;
else
a = e;
if (a == e)
a++;
答案 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++;
b > c
返回false
false ? d : e
返回e
1
a = 1
将1
分配给a
并返回a
1 == e
是true
if (true) a++;
按a
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
。我们有两个值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++
将增加a
1}}从1
到2
。
因此,虽然似乎没有发生任何事情,但事实上,我们已经完成了很多的工作。