Primary (single-operator) expression type and calculation precision depends on the operand that has higher precision class. There are 4 precision classes:

1. int (int, word, byte). In expressions, word and byte are implicitly converted to int.

2. unsigned int (pointers (including lpstr and interface pointers), unsigned int constants).

3. long (long).

4. double (double, OLE types).

The following are the exceptions:

- If
**operator**is logical or comparison, expression type is int (result 0 or 1). - Else, if both operands are lpstr or pointer, and
**operator**is -, expression type is int (difference between two pointers). - Else, if
**operand1**is lpstr or pointer, and**operand2**is int (int, byte or word) or unsigned int, expression type is type of**operand1**. - Before calculating a bitwise operator, operands are converted to unsigned int or unsigned long.
- Before calculating the % operator (integer remainder), double operands are converted to int or long.

Type of more complex expression can be found by splitting it to primary expressions.