int a = 0, b = 0, c = -1;
if (b = a || b == ++c)
a+=3;
爲什麼a,b和c分別爲3,1,0?更具體地說,爲什麼是b 1而不是0?if語句中的賦值運算符
int a = 0, b = 0, c = -1;
if (b = a || b == ++c)
a+=3;
爲什麼a,b和c分別爲3,1,0?更具體地說,爲什麼是b 1而不是0?if語句中的賦值運算符
一旦你與運營商的優先級清楚,這將是您輕鬆通過this應對這種類型的questions.Go的瞭解運算符優先級在C
你應該在通過優先級列表後看到我的答案,因爲那樣它會在你的腦海中更容易得到。現在
,來到你的問題....
開始在上面的代碼中使用的所有運營商,++c
有c
最高precedence.So值變爲0
,然後價值c
相比的b
這裏b == ++c
值計算結果爲true
即1
現在的1
和a
||
被認爲是1
。
最後。所以if
報表的總體執行結果爲true和a
值由3
遞增這個結果1
被分配到b
。因此最後的值爲a=3,b=1 and c=0
。
因爲||
的優先級高於=
,所以它的分析就像你寫的一樣。
if (b = (a || (b == ++c)))
這計算出a || (b == ++c)
。這是因爲b == 0
和++c == 0
,所以b == ++c
爲真,並且真實爲1
。
添加括號來得到你想要的東西:
if ((b = a) || (b == ++c))
但恕我直言,一般最好避免寫這樣複雜的表達式。做他們單獨的語句:
b = a;
if (b || b == ++c)
你爲什麼期望它是0? – user2357112
用parens來闡明操作順序: 'if(b =(a ||(b == ++ c)))' – qxz
@ sri.vatsa:「爲什麼是b 1而不是0」...爲什麼不? – AnT