C中的三进制运算[duplicate]

vuktfyat  于 2023-03-28  发布在  其他
关注(0)|答案(2)|浏览(113)

此问题在此处已有答案

How does the ternary operator work?(12个答案)
1年前关闭。
我有一个关于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呢?

2uluyalo

2uluyalo1#

它不是“问题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,所以它不是0,所以这是真的。接下来执行true_expr,在您的情况下是(x + y / x - y)。替换值,这计算为10 + 3 / 10 - 3 =〉10 + 0 - 3,这减少到7

bn31dyow

bn31dyow2#

三进制运算符是if-else的简化版本
return (b? (a / b) : (a + b)
会是

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

一般来说,三元运算符看起来像这样:(expression ? if_expression_is_true : else)
所以b?就是b表达式

相关问题