C 三值运算符使用问题

C 三值运算符使用问题,c,ternary-operator,C,Ternary Operator,我以前使用过三元运算符来表示类似于if else的条件,但这里不同,即在?之前不检查条件 printf( "%d\n",10?0?5:11:12 ); 已编辑: 那么,它将如何像编译器那样计算11,因为我在第一次之前没有看到任何条件?表达式10?0 ? 5:11:12是这样解析的:10?(0-5:11):12。这意味着在第一次测试中,由于10为真,它将计算0?5:11,由于0为false,因此计算结果为11。发生的事情是在伪代码中有一点: printf( "%d\n",10?0?5:1

我以前使用过三元运算符来表示类似于
if else
的条件,但这里不同,即在
之前不检查条件

  printf( "%d\n",10?0?5:11:12 );
已编辑
那么,它将如何像编译器那样计算
11
,因为我在第一次
之前没有看到任何条件?
表达式
10?0 ? 5:11:12
是这样解析的:
10?(0-5:11):12
。这意味着在第一次测试中,由于10为真,它将计算
0?5:11
,由于0为false,因此计算结果为11。

发生的事情是在伪代码中有一点:

  printf( "%d\n",10?0?5:11:12 );
(但在三元运算符中,首先是内部三元条件get的“计算”)

或者作为三元运算符,但可读性稍高一些:

(10 ? (0 ? 5 : 11) : 12)

表达式被解析为
10?(0?5:11):12
,内部条件表达式
(0?5:11)
被常数折叠为
11
,然后整个表达式被常数折叠为
11
(因为
10
是真的,因为非零)


请注意,条件(例如a的第一个测试操作数)可以是任何标量的非空表达式。尤其是
11
是一个有效条件。

将以这种方式解决

printf("%d\n",10?0?5:11:12);
i、 e
10?(0?5:11):12

首先求解
0?5:11
,因为0表示false,所以它将返回
11

现在情况将类似于
10?11:12

由于
10
为非零,条件将为真,因此它将返回
11

printf(“%d\n”,10-0-5:11:12)
的语法是
(条件)?TRUE:FALSE

有两个三元运算符。为了更好的可读性和理解性,让我们这样说

(10 ? (0 ? 5 : 11) : 12)
因此,内部条件
(0?5:11)
检查
0
TRUE
还是
FALSE
。它是一个
FALSE
值,[是的,零被视为
FALSE
,非零值被视为
TRUE
,两者对于条件检查都是完全有效的sysntax]。因此,它的计算结果为
11


现在,对于外部条件,代码显示为
(10?11:12)
。按照相似逻辑,
10
作为
TRUE
,它返回
11
。它被传递到
printf()
。这就是获得输出的方式。

您现在知道三元运算符的语法了吗<代码>(条件)?TRUE:FALSE@Rizier123 C中的条件可以是整数值。所以它在语法上是正确的。为什么不投票?这里只允许学者。这不是一个学习平台吗???可能是因为你的问题不清楚。例如,有两个
。不清楚你在问什么,也不清楚你为什么期望11以外的任何东西。要求是两个
(?)
不是我的选择,三元条件运算符是表达式,不是语句@我的示例应该用一点伪代码显示代码行