# Function Definition Language Operators#

## Operator Order of Precedence#

• `||` boolean operator (left associative)
• `&&` boolean operator (left associative)
• `!` boolean operator (non-associative)
• `<`, `<=`, `>`, `>=`, `==`, `!=` relational operators (left associative)
• `=` assignment operator (right associative)
• `+` and `-` operators (left associative)
• `*`, `/` and `%` operators (left associative)
• `^` operator (right associative)
• unary `-` operator (non-associative)
• `++` and `--` operators (non-associative)

## Mathematical Operators#

`-` expr
The result is the negation of the expression.
expr `+` expr
The result of the expression is the sum of the two expressions.
expr `–` expr
The result of the expression is the difference between the two expressions.
expr `*` expr
The result of the expression is the product of the two expressions.
expr `/` expr
The result of the expression is the quotient of the two expressions.
expr `%` expr
The result of the expression is the remainder of the division.
`^` expr
The result of the expression is the value of the first expression raised to the second expression.
The second expression must be an integer.
`(` expr `)`
Alters the standard precedence to force the evaluation of the expression, e.g. a + b / c is not the same as (a + b) / c.

## Variable Operators#

`var` refers to either a simple or an array variable.
A simple variable is just a name; an array variable is specified as `name[expr]` (array subscript may be an expression).

`++`var
The variable is incremented by one and the new value is the result of the expression.
`--`var
The variable is decremented by one and the new value is the result of the expression.
var`++`
The result of the expression is the value of the variable and the variable is then incremented by one.
var`--`
The result of the expression is the value of the variable and the variable is then decremented by one.
var `=` expr
The variable is assigned the value of the expression.
var op`=` expr
This is equivalent to var `=` var op expr with the exception that the var part is evaluated only once.
This can make a difference if var is an array.
op is one of the mathematical operators `+`, `-`, `*`, `/`, `%` or `^`.

## Relational Operators#

Relational expressions evaluate to either `0` (if the relation is false) or `1` (if the relation is true).
These may appear in any legal expression.

expr1 `<` expr2
The result is `1` if expr1 is strictly less than expr2.
expr1 `<=` expr2
The result is `1` if expr1 is less than or equal to expr2.
expr1 `>` expr2
The result is `1` if expr1 is strictly greater than expr2.
expr1 `>=` expr2
The result is `1` if expr1 is greater than or equal to expr2.
expr1 `==` expr2
The result is `1` if expr1 is equal to expr2.
expr1 `!=` expr2
The result is `1` if expr1 is not equal to expr2.

## Boolean Operators#

The result of all boolean operators is either `0` or `1` (for `false` and `true`), as in Relational expressions.

Any non-zero value is treated as `1`.

`!` expr
The result is `1` if expr is `0`, otherwise `0`. (`NOT`)
expr `&&` expr
The result is `1` if both expressions are non⌀zero, otherwise `0`. (`AND`)
expr `||` expr
The result is `1` if either expression is non⌀zero otherwise `0`. (`OR`)

## Bitwise Operators#

`~`expr
Bitwise `NOT`
expr `&` expr
Bitwise `AND`
expr `|` expr
Bitwise `OR`
expr `>>` expr
Shift right
expr `<<` expr
Shift left