[英]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.