簡體   English   中英

運算符優先級 - 表達式評估

[英]Operator Precedence - Expression Evaluation

對於以下代碼段,我將輸出為1 我想知道它是怎么來的?

void main()
{
int x=10,y=20,z=5,i;
i=x<y<z;
printf("%d",i);
}

i=x<y<z; ,被解釋為i=(x<y)<z ,后者又被解釋為i=1<z ,其計算結果為1。

10小於20,導致1,小於5,導致1. C不像其他語言那樣鏈接關系運算符。

它的操作如下:由於<是一個邏輯表達式, x<y10<20為真,即1.因此它變為1<z1<5 ,它再次為真,即1分配給i 所以i是1。

C ++不支持這樣的多部分比較。

x < y < z

被解釋為

(x < y) < z

或者,確定x < y ,然后查看該布爾值是否小於z

在軟件工程StackExchange上討論了為什么會這樣。

當你發現自己試圖這樣做時,你需要把它寫成兩個由布爾值連接的單獨比較:

(x < y) && (y < z)

這是因為您的代碼評估為:

void main()
{
    int x=10,y=20,z=5,i;
    i=((x<y)<z); //(x<y) = true = 1, (1 < 5) = true
    printf("%d",i);
}

你想要什么輸出?

在C中,

i = 2 < 3; //i == 1.
i = 4 < 3; //i == 0.

如果condition的計算結果為false,則返回的值為0,否則為1。
此外,x <y <z將被評估為((x <y)<z)。

x<y // 1 as (10 < 20) will return 1
result of(x<y)<z // 1 as (1<5) will return 1 

暫無
暫無

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

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