2013-05-29 8 views
5

Jaki jest odpowiednik tego oświadczenia?ORAZ kolejność operacji

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

Jest on

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

Albo

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

Albo

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

ect ...

Ten ha Byłem czymś, czego zawsze się bałem zbliżając, do którego właśnie otwieram warunki w nawiasach (). Byłoby wspaniale, gdyby mój umysł mógł zostać rozwiązany.

+0

Używanie nawiasów disambiguate to świetny pomysł . –

Odpowiedz

0

To zależy całkowicie od języka lub środowiska, o które pytasz, co niestety nie zostało określone.

AND może mieć wyższy priorytet niż OR lub może być odwrotny lub może być równy.

może być oceniana z lewej do prawej, od prawej do lewej lub od środka na zewnątrz w różnych kierunkach, jeśli język został zaprojektowany przez sadysty :-)

To dość powszechne AND mieć wyższy priorytet niż w przypadku skojarzeń od lewej do prawej.

W tym przypadku

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

byłoby równoważne:

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

W normalnym zestawie logicznych zdaniotwórczych (ze logicznego punktu widzenia) and jest wyższe pierwszeństwo niż or tak A or B and C jest naprawdę A or (B and C). Wikipedia wyświetla je w kolejności. Większość języków programowania powinna być zgodna z tą konwencją, chyba że są naprawdę dziwne.

Powiedział, że dla danego języka lub środowiska powinno być możliwe, aby wymyślać bardzo mały test, aby zadowolić siebie, że jest taki czy inny :)

9

Dobrym sposobem do zapamiętania jest to, aby myśleć matematycznie.

  • AND jak * (mnożenie)
  • OR jak + (dodawanie)
  • TRUE jak 1
  • FALSE jak 0

więc myśleć o tym, jak prosta matematyka to masz:

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

Jedyną rzeczą, która może być odrobinę mylący jest 1 + 1 = 1, ale nieco nie może iść powyżej 1.

więc mając to na uwadze, można następnie zastosować tę logikę:

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

Staje:

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

Patrz: https://en.wikipedia.org/wiki/Order_of_operations

+1

To naprawdę fajny sposób myślenia o operacjach boolowskich i działa jako bonusowy mnemonik do zapamiętywania porządku operacji. Znakomity. Dzięki! –