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、 e10?(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以外的任何东西。要求是两个(?)
不是我的选择,三元条件运算符是表达式,不是语句@我的示例应该用一点伪代码显示代码行