这个C表达是什么意思?

时间:2013-11-11 08:06:48

标签: c expression

寻找一些可以在我的C应用程序中重用的代码,我遇到了这个表达式:

MDO = ((output_data & 0x80) ? 1 : 0);

我理解括号之间的内容,但? 1 : 0是什么意思?

4 个答案:

答案 0 :(得分:4)

它是if-else的简写,称为ternary operator

在你的情况下它等于:

if (output_data & 0x80) {
   MDO = 1;
} else {
   MDO = 0;
}

一点建议,不要将它用于复杂的if构造,它会妨碍可读性。只有在这样的情况下才能使用它,可以立即理解。

答案 1 :(得分:3)

'?'是三元运算符,它是

的简写
if ((output_data & 0x80) != 0) { MDO = 1; } else { MDO = 0; }

如果output_data设置了第8位(0x80 = 128 =第8位),则将1分配给MDO,否则MDO将获得值0

一个更简单的例子:周五有10种啤酒,否则只有2种。

int beers = (day == Friday) ? 10 : 2;

答案 2 :(得分:1)

表示如果表达式为真,则表示MDO的值为1,否则为0

答案 3 :(得分:1)

output_data&安培; 0x80是一个按位二进制和。因此,如果该particalr位在out_putdata上,则返回0x80,否则返回0

MDO =? :

相同
if (expression)
    MDO = 1    
else
    MDO = 0

因此如果output_data上的位打开,则MDO将为1,否则为0