2016-02-17 50 views
2

所以我找了一些A-水平計算機科學歷屆試題,並偶然到這一點:關於使用括號的

enter image description here

現在,我的第一反應是,沒有必要對行括號原因是代數運算符優先於比較優先於布爾運算符的比較。

由於從Java的一個小例子:

 int a = 100; 
     int b = 100; 
     int c = 100; 
     int d = 100; 

     if(((c+d) > 180) && ((a+b+c+d)) >= 320) 
      System.out.println("greater"); 

     if(c+d > 180 && a+b+c+d >=320) 
      System.out.println("greateragain"); 

兩個if語句被評估爲true。

那麼,我正確的思維括號只是在這種情況下的人類可讀性還是......?

+6

那麼它取決於該語言的語義在該第一段(它絕對不是Java ...) –

+0

如果有問題的語言具有比加法運算符更高優先級的比較運算符,則需要括號所以它不會評估爲'c +(d> = 180)'。但就像它被說,這不是很難知道的Java .. – Tobb

+0

完全取決於使用的語言。如果你的假設是正確的,並且這是java,那麼是的,不需要paranthesis,但顯然這不是java。它看起來更像GW Basic(不知道它是否很久以前)。 –

回答

2

你可以這樣說:「括號的使用使得評估的優先性顯而易見,而忽略了正在使用的語言的操作符優先級。」

上面的註釋很好地描述了運算符優先級是語言特定的。例如,在Pascal中,像AND這樣的邏輯運算符似乎比數學運算符具有更高的優先級,並且被解釋爲二進制AND。與C相比,& &具有較低的優先級,因此您可以保存一些括號。

因此,這聽起來像一個可能的模棱兩可,或至少直到你掌握所使用的語言的情況下,明智的想法總是使用括號。

2

BASIC是早期語言之一,它利用了邏輯運算符和按位運算符可以共享相同的助記符這一事實。

在該示例 - c+d > 180 AND a+b+c+d >= 320所能受到想象力的拉伸)已經被解釋爲(c + d) > (180 AND a) + b + c + (d > 320)。出於這個原因,有必要添加括號來消除所有含糊不清。