2015-08-15 55 views
0
​​3210

這個輸出5,這是正確的。意外的三元賦值

int var = 100 + (1 == 1) ? (5) : (10); 

這又輸出5。爲什麼?


我知道我可以圍繞整個三元聲明添加括號解決這個問題,但這並不能說明與另外發生了什麼,以及爲什麼它的行爲就像一個在第一的位置。

+1

[運算符優先級表]的可能的重複(http://stackoverflow.com/questions/17369090/operator-precedence-table) –

+0

這裏有點複雜。如果不涉及條件,情況就不一樣了。編輯:什麼。 – Malina

回答

2

原因是運算符優先級的規則,並且任何非零值測試都爲真。

100 + (1 == 1) ? (5) : (10)相當於(100 + (1 == 1)) ? (5) : (10)(101 != 0) ? (5) : (10)

運算符?:的優先級低於加法運算的優先級。

4

在C中,每個非零值爲「true」,這裏100 + (1 == 1)的值爲101,這也是「true」,因此選擇了(5)。由於?:的優先級非常低,因此應該使用括號((1==1) ? 5 : 10)來達到所需的效果。