[英]C ternary operator
在学习CI的过程中,我完全感到困惑。
表达式是:
exp(V*log(i))?i%2?s:s--:s++;
如果三元运算符是Question?Positive:Negative; 我以为是这样的:
if(pow(i,V)==1&&(i%2)==0)
s--;
else
s++;
但是, s没有输入问题,请问第一个表达式是什么意思?
该程序运行良好,但我不明白为什么。
原始程序是:
main(){
#define V 1
int a, s=0, i;
for(i=1000;i>=0;i--)
exp(V*log(i))?i%2?s:s--:s++;
exp(V*log(i))?printf("%d\t%d\t",-s,i):printf("%d\t%d\t", s,-i);
getch();
}
如果exp(V log(i))为true,则测试是否为奇数i%2 == 1,如果返回s,甚至返回s-如果exp(V log(i))为false,返回s ++如果编写像这样比看起来容易:
exp(V*log(i))?(i%2?s:s--):s++;
三元运算符测试表达式是否为真。 要了解这种情况,您需要对其进行分析并将操作符的两种用法分开:
exp(V*log(i))?i%2?s:s--:s++;
这转化为
if(exp(V*log(i))
if(i%2)
s;
else
s--;
else
s++;
唯一的区别是它是一个表达式和一个语句,而不是if
/ else
版本。 它总是返回s
的当前值,但会根据条件进行更改。
如果exp
指代指数函数,那么除非输出为-inf
,否则输出将为!=0
因此该值将计算为true
。 请注意,当值超出其域时, nan
还将求值为false,并且nan
是log
的输出。
因此,基本上,您可以使用更简单的表达式对此进行翻译(除非V为零,否则i==0
的值将发生变化):
i>0?s++:i%2?s:s--;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.