使用三元运算符:var? 12-var:0

时间:2013-04-13 16:16:03

标签: c operators conditional

嘿,非常感谢你的时间!我无法理解音频编码教科书中语句的语法。在一个例子中,有一个像这样的打印功能

printf("%d semitones up or %d semitones down\n", interval,
       interval ? 12-interval : 0 );

我不理解的部分是条件运算符,或“?”。看起来我应该把它读作“如果间隔不等于0,间隔= 12 - 间隔”,但这里的语法似乎很奇怪。我习惯于条件运算符是一个更加充实的语句,如:

a = b > c ? b : c;

“如果b大于c,则大于a = b;否则a = c”

有人可以指出我对此的任何其他参考,或者解释更多关于此语法的内容吗?我找不到类似的例子。

2 个答案:

答案 0 :(得分:6)

你几乎是对的,但没有任务。它说“如果interval非零,请将12 - interval传递给printf语句,否则传递0”。

一般来说,三元运算符如下所示:

  a ? b : c

abc都是表达式。如果a的计算结果为非零,则三元运算符的计算结果为b,如果a计算结果为零,则三元运算符的结果是评估{{1}的结果}。

您的第二个示例是三元运算符和赋值运算符的组合。三元运算符本身不执行任何赋值。

答案 1 :(得分:-1)

任何导致布尔值的表达式都可以。在C的情况下,整数可以用作布尔值,值0被视为false,其他任何内容都被视为true

因此,在您的情况下,interval ? 12-interval : 0表示:如果interval非零,请使用12-interval,否则请使用0。为了更加详细,您可以将其重写为:

 interval != 0 ? 12-interval : 0