# Program Flow

Boolean expressions are used to compare two values and get a true-or-false answer:

*value1***relational_operator**value2The following relational operators are used:

< | less than |

> | greater than |

= | equal to |

<= | less than or equal to |

>= | greater than or equal to |

<> | not equal to |

You can assign Boolean expressions to Boolean variables. Here we assign a true expression to *some_bool*:

`some_bool := 3 < 5;`

Complex Boolean expressions are formed by using the Boolean operators:

not | negation (~) |

and | conjunction (^) |

or | disjunction (v) |

xor | exclusive-or |

** NOT** is a unary operator — it is applied to only one value and inverts it:

`not true = false``not false = true`

** AND** yields

`TRUE`only if both values are

`TRUE`:

`TRUE and FALSE = FALSE``TRUE and TRUE = TRUE`

** OR** yields

`TRUE`if at least one value is

`TRUE`:

`TRUE or TRUE = TRUE``TRUE or FALSE = TRUE``FALSE or TRUE = TRUE``FALSE or FALSE = FALSE`

** XOR** yields

`TRUE`if one expression is TRUE and the other is FALSE. Thus:

`TRUE xor TRUE = FALSE``TRUE xor FALSE = TRUE``FALSE xor TRUE = TRUE``FALSE xor FALSE = FALSE`

When combining two Boolean expressions using relational and Boolean operators, be careful to use parentheses.

`(3>5) or (650<1)`

This is because the Boolean operators are higher on the order of operations than the relational operators:

- not
- * / div mod and
- + - or
- < > <= >= = <>

So `3 > 5 or 650 < 1` becomes evaluated as
` 3 > (5 or 650) < 1`, which makes no
sense, because the Boolean operator `or` only works on Boolean
values, not on integers.

The Boolean operators (AND, OR, NOT, XOR) can be used on Boolean variables just as easily as they are used on Boolean expressions.

Whenever possible, don't compare two real values with the equals sign. Small round-off errors may cause two equivalent expressions to differ.