C++ 你能帮我分析一下这个代码到底在做什么吗?如果((a=b>;c?d:e)=e)a++;;
答案是a=2 我不明白这到底在做什么 你能帮我一步一步地弄清楚这段代码是做什么的吗C++ 你能帮我分析一下这个代码到底在做什么吗?如果((a=b>;c?d:e)=e)a++;;,c++,c,syntax,ternary-operator,C++,C,Syntax,Ternary Operator,答案是a=2 我不明白这到底在做什么 你能帮我一步一步地弄清楚这段代码是做什么的吗 int a = 2, b = 3, c = 5, d = 4, e = 1; if ((a = b > c ? d : e) == e) a++; 等于: if ((a = b > c ? d : e) == e) a++; 还可以看看:我想这是你想知道的主要地方 a?b:c称为条件运算符,意思是如果a为真,则使用b,否则使用c if (b > c) a = d; else
int a = 2, b = 3, c = 5, d = 4, e = 1;
if ((a = b > c ? d : e) == e) a++;
等于:
if ((a = b > c ? d : e) == e) a++;
还可以看看:我想这是你想知道的主要地方 a?b:c称为条件运算符,意思是如果a为真,则使用b,否则使用c
if (b > c)
a = d;
else
a = e;
if (a == e)
a++;
等于
(a = b> c? d : e)
首先,所谓的三元运算符(带?标记)检查条件(
b>c
):
并将值e
赋给变量a
(因为条件失败,所以选择了第二个选项),因此,a=1
然后它检查变量a
是否等于e
(它是true
),并相应地将变量a
增加1,因此变为2
注:看起来最关键的部分是学习三元运算符和C中的操作优先级
a= b > c ? d : e
b>c
返回false
错误?d:e
返回e
,即1
a=1
将1
赋值给a
并返回a
1==e
为true
if(true)a++代码>按1
因此,
a
在最后等于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
我希望这有帮助;) 首先,如果我们在代码执行后查看变量,看起来没有什么变化。但这是真的吗 好的,LiHo已经展示了它的分解,以及它如何“翻译”成更易于阅读的代码,并且使用他的代码,应该很容易看到发生了什么。但只是为了好玩,让我们分解这个东西,并在给定的数字下运行它,好吗
int a = 2, b = 3, c = 5, d = 4, e = 1;
if ( (a = ( (b > c) ? d : e )) == e ) a++;
其形式如下:
if ((a = b > c ? d : e) == e) a++;
查看,我们看到三元运算符(?:
)的等级高于=
,因此它将首先计算:
(a = b > c ? d : e)
这是一个美化的if
语句:如果b
大于c
,则返回d
,否则返回e
。我们有b
和c
的值,我们还知道3
不大于5
。因此,我们知道该语句将返回e
现在,我们简化了我们的表达式:
b > c ? d : e
这是一项任务。它将a
设置为等于e
。现在,我们将退一步了解更多的背景:
(a = e)
这里发生的是,在执行操作(a=e)
之后,它会返回一个结果。方便地说,该结果是赋值后a
的值。因此,我们有:
if((a = e) == e) a++;
由于我们已将a
设置为等于e
(即等于1
),因此if
将执行a++
并将a
从1
增加到2
因此,虽然看起来什么也没发生,但实际上,我们做了很多工作。只是一个小小的吹毛求疵(因为您的逻辑实际上是正确的):赋值是第二位的-三元值是第一位求值的。谢谢您的澄清;)孩子,学习优先规则。研究它们。与他们融为一体。只有这样,你才能获得真正的启迪。
(a = e)
if((a = e) == e) a++;
if(a == e) a++;