簡體   English   中英

可能不正確的操作員優先級

[英]Possible incorrect operators priority

考慮以下偽代碼:

int x = 10;
int y = 10;

x = x + x++;
y = y++ + y;

print(x); // 20
print(y); // 21

像 C# 或 Java 這樣的類 C 編程語言說增量比+運算符具有更高的優先級。 所以在這兩種情況下它都應該是21

為什么它打印兩種不同的結果?

請記住,我們是從左到右工作的。

讓我們先處理 x 然后處理 y。

X

x = x + x++;

我們從左到右...

x = 10 + (10++)

注意:當我們從左到右時,最右側 x 上的后增量運算符對首先出現在 RHS 上的 x 沒有影響。

x = 20

y = y++ + y;

y = 10++ + 11;

我們再次從左到右,增量運算符 post 將 y 從 10 增加到 11,因此最右側的 y 變為 11,從而產生 (10 + 11) = 21。

我相信+運算符的優先級高於++ ,所以+運算符首先被評估,但為了評估它 - 它必須評估它的左右運算符。

在第二個示例中,首先評估左運算符,因此在評估右手之前y遞增。


Precedence and Order of Evaluation文檔中,您可以看到+高於+= ,這基本上就是++ +上面是前綴++ ,不要與后綴++混淆。

y++ + y被評估時, y++y之前被評估。 因此,左側的計算結果為 10,由於先前的增量,右側的計算結果為 11。 當計算x + x++xx++之前計算。 所以兩邊都將被評估為 10,然后x將被評估為 11,就在=操作數將x評估為 20 之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM