簡體   English   中英

Java中的算術運算符(初學者問題)

[英]Arithmetic Operators in Java (Beginner Question)

我知道數組運算符具有優先權。 然后是二元關節運算符*,/,%。 然后+和 - 它們優先級低。

但我很困惑,在這個例子中,java將首先解決哪個問題。 如果我們有2個運算符具有相同的優先級,那么首先在java中使用哪個運算符?

謝謝。

int x = y = -2 + 5 * 7 - 7 / 2 % 5;

如果有人能為我解決這個問題,請逐一向我解釋。 因為這總是讓我對考試感到困惑。

如果運算符具有相同的優先級,則從左到右對它們進行求值。

教程

當具有相同優先級的運算符出現在同一表達式中時,規則必須控制首先計算的值。 除了賦值運算符之外的所有二元運算符都是從左到右計算的; 賦值運算符從右到左進行計算。

在表達式中, 7 / 2 % 5/%具有相同的優先級,因此從左到右7 / 2 = 33 % 5 = 3

最高優先級為* /%。 以下是您的示例的細分:

  -2 + 5 * 7 - 7 / 2 % 5
= -2 + (5 * 7) - (7 / 2 % 5)
= -2 + 35 - (3 % 5)
= -2 + 35 - 3
= 30

y將被賦值為-2 + 5 * 7 - 7 / 2 % 5 然后x將被賦予y的值。

算術表達式的評估方式如下:

-2 + (5 * 7) - ((7 / 2) % 5)

是對Java運算符優先級的解釋。

這看起來像你需要閱讀的內容: Java Operators Tutorial

閱讀教程,然后自己編寫一個示例程序,並使用它直到您對運算符優先級感到滿意為止。 這是最好的學習方式。

int x = y = -2 + 5 * 7 - 7 / 2 % 5;

和...一樣

int x = y = (-2 + ((5 * 7) - ((7 / 2) % 5)));

/,*和%(乘法)具有相同的優先級,並且它們的關聯從左到右。
+和 - (加法)具有相同的優先級,並且它們的關聯從左到右。
乘法運算優先於加法運算。

不完全相關,但你可能會發現這個有趣。 它與序列點有關,序列點是程序中的點,它們本質上是編譯器確保所有內容都同步的點。 由於問題是什么,它出現在SO上

x = x++; // Operator prcedence and/or sequence point problem;

做? 或者更糟

x[i]=i++ + 1;// sequence point problem

為什么會進入無限循環?

http://www.angelikalanger.com/Articles/VSJ/SequencePoints/SequencePoints.html

暫無
暫無

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

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