0

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

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

我明白括号之间的内容是什么,但这是什么? 1 : 0 意思?

4

4 回答 4

4

它的简写if-else,称为三元运算符

在您的情况下,它等于:

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

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

于 2013-11-11T08:08:38.943 回答
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;
于 2013-11-11T08:09:52.107 回答
1

这意味着如果表达式为真,则 MDO 的值为 1,否则为 0

于 2013-11-11T08:08:43.593 回答
1

output_data& 0x80 是按位二进制与。因此,如果该特定位在 out_putdata 上,则返回 0x80,否则返回 0

MDO= ? :

是相同的

if (expression)
    MDO = 1    
else
    MDO = 0

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

于 2013-11-11T08:10:07.800 回答