[英]Confusion about operator precedence in C
我對如何解釋以下代碼段中運算符的優先級感到有些困惑:
int a,b,c,d;
a=b=c=d=1;
a=++b>1 || ++c>1 && ++d>1
此代碼片段末尾的 a,b,c,d 的值分別為 1,2,1,1。 我試圖破譯這里發生的事情,但無濟於事。
我知道 ++ 的優先級高於任何其他運算符,那么為什么 b、c 和 d 不等於 2? 根據我收到的結果,我猜想當在第一步 b 遞增到 2 時,表達式是從左到右計算的,因此 ++b>1 為真,因為有一個邏輯 OR 立即返回答案。 就像是: (++b>1) || (++c>1 && ++d>1)
除了將操作數組合在一起之外,運算符優先級還有其他作用嗎? 例如,它與執行順序有什么關系?
原因是短路評估,這意味着只要一個條件被評估為true
(從左數),評估就會停止。
這個:
a=++b>1 || ++c>1 && ++d>1
因此類似於:
if(++b > 1) {
a = true;
} else if(++c > 1) {
if(++d > 1) {
a = true;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.