# Operators

An operator is a special symbol used to perform assignment, arithmetic, comparison or other operation. Here are listed binary operators, that is, operators that are used with two operands, like a+b. See also: unary operators (used with single operand), member access operator . and array element access operator [].

### Syntax1

`result = operand1 operator operand2`

For example, a = b + 1 means "add b and 1, and assign the result to a". Here b is operand1, + is operator, 1 is operand2.

### Syntax2

`operand1 operator operand2`

Here operand1 receives result. For example, a + 1 means "add 1 to a" (the same as a = a + 1).

### Parameters

operands - any expressions (variables, constants, functions, expressions with operators).

operator - one of symbols listed below.

## Assignment

To assign something to a variable, use =. Example: a = 1

When used with if or in other assignment, = is interpreted as comparison operator (see below).

## Arithmetic and bitwise operators

 Arithmetic + add. Example: a = b + 1 - subtract * multiply / divide % modulus
 Bitwise & AND | OR ^ XOR ~ AND NOT << left shift >> right shift (unsigned)

Priority of all arithmetic and bitwise operators is equal. For example, in a=b+c*d, at first is calculated b+c, then multiplied by d.

## Comparison operators

 === equal. Example: if(a=5) out "a is 5" !!=<> not equal > more >= more or equal < less <= less or equal

Priority of comparison operators is lower than of arithmetic and bitwise operators. For example, if(a < b+c), at first is calculated b+c, then compared with a.

Result of comparison operators is 1 (true) or 0 (false).

## Logical operators

 and&& logical AND. Example: if(a=b and c

Priority of logical operators is lower than of arithmetic, bitwise and comparison operators. For example, in if(a>b and c!=d), at first are compared a>b, then c!=d.

Result of logical operators is 1 or 0. Operator and gives 1 if both operands are not 0. If operand1 is 0, operand2 is not evaluated. Operator or gives 1 if one of operands is not 0. If operand1 is not 0, operand2 is not evaluated.

## Operators used with str variables

 Comparison = equal, case sensitive. Example: if(s="abc") out "s is ''abc''" ! not equal, case sensitive ~ equal, case insensitive

Note that "" and null are not equal. Don't use if(s="") to check if s is empty. Instead use if(empty(s)) or if(!s.len). See also: empty, StrCompare.

 Join (syntax2) + append. Example: str s; s="notepad"; s+".exe" - append to the beginning

Operators + and - are not used with syntax1 to join strings. Instead of s1=s2+s3 use s1.from(s2 s3) or s1=F"{s2}{s3}".

### Remarks

Only the assignment operator can be used with all variable types. Other operators can be used with QM intrinsic types (int, byte, word, long, double, str, lpstr). With other types, some operators cannot be used, or the result may be not as you need. Therefore usually it is better to convert to the intrinsic type that you need. Example: BSTR b="xx"; str s=b; if(s="xx") ;;don't use if(b="xx).

#### Syntax1

Operands of type str are interpreted as lpstr, except with str comparison operators =, !, ~.

lpstr and pointers are interpreted as numeric (unsigned int). For example if(s1=s2) compares pointers, but not the strings. Another example: in s1=s2+1, s1 receives address of the second character of s2 (if s2 was "tree", s1 will be "ree").

#### Syntax2

Like in C/C++, arithmetic and bitwise operators may be followed by =. Example: a+=1.

### Examples

```i = 5 ;;assign 5 to variable i
i + 2 ;;add 2 to variable i
a = b + 10 ;;calculate sum of b and 10, and assign it to variable a
a + b + 10 ;;calculate sum of b and 10, and add it to variable a
int j = i + 2 ;;declaration and assignment in the same statement
ave = i + j / 2 ;;add j to i, divide by 2, then assign result to variable ave
f = i - (10 * j) + Func(a b) * 10 ;;multiply 10 and j, extract result from i, call function Func and add its return value, multiply by 10, then assign result to variable f