簡體   English   中英

三元運算符

[英]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,並且nanlog的輸出。

因此,基本上,您可以使用更簡單的表達式對此進行翻譯(除非V為零,否則i==0的值將發生變化):

i>0?s++:i%2?s:s--;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM