[英]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<y
即10<20
為真,即1.因此它變為1<z
即1<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.