我們有一個表達優先級和結合在邏輯運算符用C
int x,y,z;
x=y=z=2;
y=++x || --y;
printf("%d %d",x,y);
它給x=3
和y=2
作爲輸出,但我認爲我們在這裏有4個運營商:++
,--
,||
和=
。
我們知道++
和--
具有最高的優先級,所以他們必須先評估,然後||
,然後=
。
另外我們知道++
和--
具有相同的優先級,所以我們使用關聯性,在這種情況下,它是正確的左邊。所以我認爲首先--y
將被評估,其中y=1
,然後++x
這應該給x=3
,然後||
應評估。
爲什麼我從我的機器得到不同的答案?謝謝。
優先順序與評估順序無關。無論如何,它是未定義的行爲,如果'--y'被評估。在這種情況下,你實際尋找的是短路評估,因爲實際上'--y'在這裏沒有被評估。 – chris 2014-08-28 18:27:16
請停止使用複雜,無方括號的表達式和可疑行爲編寫垃圾代碼。它會讓你被解僱。 – 2014-08-28 20:58:15