1

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

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”

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

4

2 回答 2

6

你几乎是对的,但没有分配发生。它的意思是“如果interval非零,则传递12 - intervalprintf语句,否则传递0”。

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

  a ? b : c

其中a, b, 和c都是表达式。如果a计算结果为非零,则三元运算符的计算结果如同b,如果a计算结果为零,则三元运算符的结果是计算的结果c

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

于 2013-04-13T16:18:05.397 回答
-1

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

因此,在您的情况下,interval ? 12-interval : 0, 意味着:如果interval非零,则使用12-interval,否则,使用0。为了更加冗长,您可以将其重写为:

 interval != 0 ? 12-interval : 0
于 2013-04-13T16:18:06.057 回答