int a = 2, b = 3, c = 5, d = 4, e = 1;
if ((a = b > c ? d : e) == e) a++;
答案是 a=2
我不明白这实际上在做什么。
你能帮我逐步弄清楚这段代码的作用吗?
int a = 2, b = 3, c = 5, d = 4, e = 1;
if ((a = b > c ? d : e) == e) a++;
答案是 a=2
我不明白这实际上在做什么。
你能帮我逐步弄清楚这段代码的作用吗?
if ((a = b > c ? d : e) == e) a++;
等于:
if (b > c)
a = d;
else
a = e;
if (a == e)
a++;
也看看:什么是'?用 C++ 做?
要了解您必须组合 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
我希望它有帮助;)
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
。
我认为这是你想知道的主要地点
一种 ?b : c 称为条件运算符,表示如果 a 为真则使用 b,否则使用 c。
(a = b> c? d : e)
就等于
if(b>c)
a = d;
else
a = e;
首先,所谓的三元运算符(带有 ? 标记)检查条件 ( b>c
):
a= b > c ? d : e
并将值分配e
给变量a
(因为条件失败,它采用了第二个选项),所以,a=1
然后它检查变量a
是否相等e
(它是true
)并相应地将变量增加a
1,所以它变成了2
注意:看起来对您来说最关键的部分是学习C 中的三元运算符和运算优先级。
起初,如果我们在这段代码执行后查看变量,看起来并没有发生太多事情。但这是真的吗?
好吧,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++
并将a
从1
增加到2
。
因此,虽然看起来什么都没有发生,但实际上,我们已经做了很多工作。