C问题中的条件运算符

时间:2010-05-19 18:35:23

标签: c conditional ternary-operator operator-keyword

我只是对条件运算符有一个快速的问题。这里还是一个崭露头角的程序员。 给予x = 1,y = 2,z = 3。

我想知道,为什么在这句话之后:

y += x-- ? z++ : --z;

y为5.语句后面的值为x = 0,y = 5,z = 4。 我知道条件运算符的工作方式是它的格式如下: 变量=条件?值为true:如果为false则为value。

对于条件,y + = x--,y如何变为5?我只能看到2(2 + = 0)和3(2 + = 1)(然后x--变为零)作为可能性。任何帮助深表感谢。 :)

13 个答案:

答案 0 :(得分:10)

当它评估条件(x!= 0)时x仍然是1(即not 0)。所以选择z++。这仍然是3. 2 + 3 = 5.在一天结束时,x变为0,z变为4。

查看here了解详情。记住一件简单的事情很重要:当你说x ++使用x的当前值并且然后时它会增加。当您说++x时,它首先递增,然后然后

答案 1 :(得分:7)

运算符?:优先级高于运算符+ =。所以你的表达式被评估为

y += (x-- ? z++ : --z);

x-- ? z++ : --z表达式的值是表达式z++(即3)的值,因为表达式x--的值为1

答案 2 :(得分:6)

将其分解为类似的if声明:

if (x--)
    y += z++;
else
    y += --z;

在您的情况下,由于x1,因此您将采用此if语句的“true”方面。这意味着您要将z++添加到y,并提供3 + 2,从而产生5

请不要写这样的代码。

答案 3 :(得分:1)

作为一个崭露头角的程序员,只要知道你不应该写这样的东西,这样你就可以忘记它让你担心!

答案 4 :(得分:0)

原因是后递减/递增运算符(x++x--)执行以下操作:

  1. 增加或减少变量
  2. 返回原始值。
  3. 因此x--的返回值为1,表示为true,因此评估语句z++,返回原始值3.

    y = 2起,y += 35

答案 5 :(得分:0)

x--意味着表达式在x的当前值处被评估,之后x被减少1.与Z ++的情况相同。这是--z的另一种方式,这意味着它是以z的新值进行评估。

因此,在评估时x为1,z为3.并且在表达式x的评估变为0和z 4之后;并且y = 2 + 3 = 5

答案 6 :(得分:0)

请记住,递增和递减运算符根据它们是放在变量名称之前还是之后返回不同的东西。

特别是,在评估x--时,它会将x减少1,但会返回未修改的x值,在这种情况下为1在C中,1的计算结果为true,因此三元运算符将返回z++

同样,因为++运算符放在变量之后,z++的返回值是未修改的z值,即3。

因此,这归结为y += 3,导致y为5。

答案 7 :(得分:0)

x--和z ++在使用后递减和递增。当评估三元运算符时,你得到以下结果:

y + =(1)? (3):( - z);

- z永远不会被调用,条件求值为true并执行三元运算符中的第一个选项。使用后,x然后递减,z递增。

答案 8 :(得分:0)

这是正常的,因为它首先“运行”三元运算符然后递减,因为你的递减运算符(x--)是后缀,所以你得到z ++,这是3,所以你有5个y。

答案 9 :(得分:0)

表达式x--计算为x的当前值,即1.因此条件表达式的结果为z++,其计算结果为3. 3添加到{ {1}},总共5个。

答案 10 :(得分:0)

我认为你的根本问题在于你假设y+= x--是你的条件,而实际上你的条件只是x--。条件运算符返回,使y +=成为条件运算的结果:x-- ? z++ : --z;为5.其他注释具有实际计算结果为5的原因。

答案 11 :(得分:0)

y + =(x--?z ++: - z);所以这是你的问题,答案很简单................

正如我们所知,像X--或x ++这样的东西被称为后递增或递减。因此,根据后递增或递减的规则,将首先评估表达式,然后只有增量或减量才会生效。即首先评估然后增加或减少.....

现在让我们解决你的问题:

Y + = X - ?Z ++: - Z ....现在它包含三个部分,即左,中,右......现在考虑的要点是:“如果左边部分为真,那么它将返回中间部分,否则右侧部分......并且执行总是从左侧部分开始,因为它是条件部分“

现在将语句简化为:Y + = X?Z:Z; ....现在查看左侧部分是否有前置或后置增量或减量.....如果后++ / - 是第一个评估简化语句...... den go for ++ / - 。。

现在左边的部分正在减少...所以我们首先评估表达式......即

y + = 1:3:3 //条件部分中的任何非零值都是真实条件(即1)

所以现在我们的条件为真,它将返回中间部分,当控制进入中间部分时,只有x值会减少,即变为0 ....

现在第二个简化陈述是Y + = Z. (\\条件为真,我们得到中间部分,编译器将跳过其余部分,即右部分。)

现在观察Z是否是后++ / - (或)pre ++ / - )... hahh..its post increment ..所以只需首先评估简化的statement2然后增加Z的值。 ...即

                     Y+=Z =>Y=Y+Z
                    =>Y=2+3 =>y=5

现在评估表达式,即Y = 5,所以现在增加Z的值,即它变为4

答案 12 :(得分:0)

正如我们所知,运算符检查条件是否为true i.e 1,它执行真正的语句。

如果是false i.e 0则执行错误陈述

我们正在初始化x to 1执行true语句

的值

因此,它会从真实的5

中公开结果y=(y+z++)