【问题标题】:What does this C expression mean? [duplicate]这个 C 表达式是什么意思? [复制]
【发布时间】:2013-11-22 23:17:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: c expression


    【解决方案1】:

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

    在你的情况下它等于:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案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;
        

        【讨论】:

          【解决方案4】:

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

          MDO= ? :

          是一样的

          if (expression)
              MDO = 1    
          else
              MDO = 0
          

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

          【讨论】:

          • 不一样。三元运算符不会return
          • 我的意思是从函数中返回表达式 no 'return'.. 修复以使其更清晰
          猜你喜欢
          • 2016-06-10
          • 2012-08-03
          • 2015-02-24
          • 2021-09-16
          • 1970-01-01
          • 1970-01-01
          • 2010-10-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多