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

Paj*_*ama 1 c conditional operators

嘿,非常感谢你的时间!我无法理解音频编码教科书中语句的语法.在一个示例中,存在如下的打印功能

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

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

a = b > c ? b : c;
Run Code Online (Sandbox Code Playgroud)

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

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

Car*_*rum 6

你几乎是对的,但没有任务.它说"如果interval非零,则12 - interval转到printf声明,否则通过0".

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

  a ? b : c
Run Code Online (Sandbox Code Playgroud)

哪里a,bc,都是表达.如果a求值为非零,则三元运算符将进行求值b,如果a求值为零,则三元运算符的结果是求值结果c.

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