2013-05-29 112 views
5

這個陳述的等價物是什麼?AND OR操作順序

if(cond1 AND cond2 AND cond3 OR cond4 AND cond5 AND cond6) 

是否

if((cond1 AND cond2 AND cond3) OR (cond4 AND cond5 AND cond6)) 

或者

if(cond1 AND cond2 AND (cond3 OR cond4) AND cond5 AND cond6) 

或者

if(((cond1 AND cond2 AND cond3) OR cond4) AND cond5 AND cond6) 

等...

此HA是我一直害怕接近的東西,我只是圍繞着括號()中的條件。如果我的思想能夠得到解決,那將是非常棒的。

+0

使用括號來消除歧義是個好主意。 –

回答

0

它完全取決於您所問的語言或環境,這很遺憾您沒有指定。

AND可能具有比OR更高的優先級,或者它可能是相反的方式,或者它可能相等。

它可以被評估左到右,從右到左,或從中間向外如果你的語言是一個虐待狂:-)

這是很常見的AND有設計交替方向比OR更高的優先級,並且它們都是從左到右的聯想。

在這種情況下

cond1 AND cond2 AND cond3 OR cond4 AND cond5 AND cond 6 

將相當於:

((cond1 AND cond2) AND cond3) OR ((cond4 AND cond5) AND cond 6) 
1

在正常組布爾連接詞(從邏輯的觀點來看)的,and是優先級高於or,所以A or B and C真的是A or (B and C)Wikipedia按順序列出它們。大多數編程語言應該遵守這個約定,除非它們真的很奇怪。

這就是說,爲您的特定語言或環境應該可以編造一個非常小的測試,以滿足自己,這是一種方式或其他:)

9

一個很好的方法來記住這是數學想到它。

  • AND*(乘)
  • OR+(加)
  • TRUE1
  • FALSE0

這樣想着它當作簡單的數學你會得到這樣的:

  • 0 * 0 = 0
  • 1 * 0 = 0
  • 1 * 1 = 1
  • 0 + 0 = 0
  • 1 + 0 = 1
  • 1 + 1 = 1

只有可能是一點點令人困惑的事情是1 + 1 = 1,但有點不能去高於1

所以,記住,你就可以申請這個邏輯:

if(cond1 AND cond2 AND cond3 OR cond4 AND cond5 AND cond6)

變爲:

if(cond1 * cond2 * cond3 + cond4 * cond5 * cond6)

參見:https://en.wikipedia.org/wiki/Order_of_operations

+1

這是一個考慮布爾運算的非常酷的方法,它可以作爲記憶操作順序的助記符。輝煌。謝謝! –