A good way to remember this is to think of it mathematically.

`AND`

as`*`

(multiply)`OR`

as`+`

(addition)`TRUE`

as`1`

`FALSE`

as`0`

So thinking of it as simple math you get this:

`0 * 0 = 0`

`1 * 0 = 0`

`1 * 1 = 1`

`0 + 0 = 0`

`1 + 0 = 1`

`1 + 1 = 1`

Only thing that may be a tiny bit confusing is `1 + 1 = 1`

, but a bit can’t go above `1`

. But it makes sense if you think of `1`

as any non-zero number.

So with this in mind you can then apply this logic:

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

Becomes:

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

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

In most languages `AND`

is evaluated first,

hence

```
if((cond1 AND cond2 AND cond3) OR (cond4 AND cond5 AND cond 6))
```

is the right choice.

For C#, See http://msdn.microsoft.com/en-us/library/aa691323%28v=vs.71%29.aspx

For C, See http://en.cppreference.com/w/cpp/language/operator_precedence

For Java , See http://bmanolov.free.fr/javaoperators.php

In the normal set of boolean connectives (from a logic standpoint), `and`

is higher-precedence than `or`

, so `A or B and C`

is really `A or (B and C)`

. Wikipedia lists them in-order. Most programming languages should obey this convention unless they are really weird.

That said, for your particular language or environment it should be possible to concoct a very small test to satisfy yourself that it is one way or the other 🙂