The following mathematical operations are supported:
| Symbol | Arity | Description |
| + | binary | addition |
| - | unary | negation |
| - | binary | subtraction |
| + + | unary | pre- and post-increment |
| - - | unary | pre- and post-decrement |
| * | binary | multiplication |
| / | binary | division |
| % | binary | remainder, e.g., 5%3 = 2 |
| ^ | binary | power, x ^ y = x to power y |
| & , and | binary | and, value is 1 if both operands are nonzero |
| | , or | binary | or, value is 1 if either operand is nonzero |
| ! , ~ , not | unary | not, value is 1/0 if operand is zero/nonzero |
| > , gt | binary | greater than, value is 1 if left operand is greater than the right |
| > = , ge | binary | greater or equal, value is 1 if left operand is greater or equal to the right |
| < , lt | binary | less than, value is 1 if the left operand is less than the right |
| < = , le | binary | less or equal, value is 1 if the left operand is less than or equal to the right |
| ! = , ne , < > , > < | binary | not equal, value is 1 if the left operand is not equal to the right |
| = = , eq | binary | equal, value is 1 if the left operand is equal to the right |
|---|---|---|
| = | binary | the left operand takes the value of the right, and the value is that of the right operand. The type of the left operand becomes that of the right. |
A variable type is determined by its first assignment, of by declaration for arrays. It is generally an error to attempt to redefine a variable to a different type, though if a scalar is assigned from a handle, the scalar type is promoted to handle type.
Note that all operators, including assignment, return a value. Thus, expressions like 3*(x > y) make sense (the value is 0 or 3). Binary truth is indicated by a nonzero value.
The increment/decrement operators (++/-) behave as in the C language. That is
y = x + + is equivalent to y = x;x = x + 1
y = x - - is equivalent to y = x;x = x - 1
y = + + x is equivalent to x = x + 1;y = x
y = x - - is equivalent to x = x - 1;y = x