C问题中的条件运算符

See*_*hor 3 c conditional ternary-operator operator-keyword

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

我想知道,为什么在这个声明之后:

y += x-- ? z++ : --z;
Run Code Online (Sandbox Code Playgroud)

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

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

nc3*_*c3b 10

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

看看这里的细节.记住一个简单的事情很重要:当你说x ++x的当前值被使用然后它会增加.当你说它++x首先递增然后使用.


Mac*_*ehl 7

运算符?:具有比运算符+ =更高的优先级.所以你的表达式被评估为

y += (x-- ? z++ : --z);
Run Code Online (Sandbox Code Playgroud)

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

  • 实际上回答混乱的+1.优先考虑?:永远不应该被视为理所当然. (2认同)

Car*_*rum 6

把它分解成类似的if声明:

if (x--)
    y += z++;
else
    y += --z;
Run Code Online (Sandbox Code Playgroud)

在你的情况,因为x就是1,你会利用这个if语句的"真实"的一面.这意味着你要添加z++y,给3 + 2,导致5.

请不要写这样的代码.