【问题标题】:Ternary Operation in C [duplicate]C中的三元运算符
【发布时间】:2021-10-25 11:34:16
【问题描述】:

我有一个关于 C 中的三元运算的技术问题。 假设我们有以下程序:

#include <stdio.h>
#define M(a, b) (b? (a / b) : (a + b))
int main()
{
   int x = 10, y = 3;
   printf("%d\n" , M(x + y , x - y));
}

在宏中,问题b的含义是什么? 另外,我知道最后的答案是7,但是怎么是7呢?

【问题讨论】:

  • b ? 表示如果b 为真,即如果b != 0。这种情况下做除法,否则做加法
  • 你需要括号:(b)?,这相当于(10-3)?,也就是你对7?...的想法。也就是说它是一个条件表达式,对于整数,它评估值的“真实性”,也就是非零
  • 这是否回答了您的问题:stackoverflow.com/questions/463155/… ?
  • 还要注意 M(X, Y) 在实际编译之前被文本替换:所以编译器会看到:(x -y ? (x + y / x - y) : (x + y + x - y))

标签: c conditional-operator ansi


【解决方案1】:

不是“问题b”,而是三元运算符的语法

expr ? true_expr : false_expr

在你的情况下,宏替换后你的代码真的变成了

int main()
{
   int x = 10, y = 3;
   printf("%d\n" , (x - y? (x + y / x - y) : (x + y + x - y));
}

因为x - y 是 7,所以这变为真的,因为它不是0true_expr 接下来执行,在您的情况下是 (x + y / x - y)。替换值,计算结果为10 + 3 / 10 - 3 => 10 + 0 - 3,减少为7

【讨论】:

    【解决方案2】:

    三元运算符是 if-else 的较短版本

    return (b? (a / b) : (a + b)

    if (b)
    {
       -> a/b
    }
    else
    {
       -> a+b
    }
    

    一般来说,三元运算符如下所示: (expression ? if_expression_is_true : else)

    所以b? 就是b 表达式

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 2013-10-01
      • 1970-01-01
      相关资源
      最近更新 更多