Operators
From Free Pascal wiki
Jump to navigationJump to search
│ Deutsch (de) │ English (en) │
Free Pascal operators
Address operator
The address operator @ returns the start address of a variable, a procedure or a function. If the compiler switch is {$ T-}, the return value is an untyped pointer. If the compiler switch is {$ T +}, the return value is a typed pointer. The default setting for the compiler is {$ T-}.
Assignment operator
The assignment operator assigns a value to a data field.
a := b; // b is assigned to a
Relational operators
The following operations are possible:
- Integer and floating point data fields can be mixed on both sides of the operator.
- Short, ANSI and Widestring data fields can be mixed on both sides of the operator.
| Operator | Meaning |
|---|---|
| = | equal |
| <> | not equal |
| < | less than |
| > | greater than |
| <= | less than or equal |
| >= | greater or equal |
| in | checks whether the element appears in a set of the same data type |
Binary arithmetic operators
| Operator | Meaning |
|---|---|
| + | addition |
| - | subtraction |
| * | multiplication |
| / | division |
| div | integer division (Calculates the integer value of how many times an integer is in another integer.) |
| mod | modulo division (Computes the integer remainder of a division of two integers.) |
Unary arithmetic operators
+ specifies that the value is positive
- specifies that the value is negative
Examples:
a := +7;
b := -3;
Logical operators
| Operator | Operation |
|---|---|
| not | Bitwise unary negation |
| and | Bitwise and |
| or | Bitwise or |
| xor | Bitwise exclusive or |
| shl | Bitwise shift to the left |
| shr | Bitwise shift to the right |
| << | Bitwise shift to the left (corresponds with the operator shl) |
| >> | Bitwise shift to the right (corresponds with the operator shr) |
Examples:
A shr 1 // corresponds to integer DIV 2 (only that it is faster)
// (only for integer data fields, the result is rounded down to an integer)
Not 1 // corresponds to -2
Not 0 // corresponds to -1
Not -1 // corresponds to 0
B shl 2 // corresponds to integer * 4 (only that it is faster)
// (only for integer data fields, the result is an integer)
1 or 2 // corresponds to 3
3 xor 1 // corresponds to 2
Truth operators
| Operator | Operation |
|---|---|
| not | logical negation (unary) |
| and | logical and |
| or | logical or |
| xor | logical xor |
String operators
| Operator | Operation |
|---|---|
| + | String concatenation (joins two strings together) |
Set operators
| Operator | Operation |
|---|---|
| + | union |
| - | difference set |
| * | intersection |
| >< | symmetrical difference |
| <= | contains |
| include | add an item to the set |
| exclude | delete an item in the set |
| in | checks if the item is in the set |
Class Operators
| Operator | Operation |
|---|---|
| is | checks whether the object is of a certain class |
| as | performs a conditional type cast (conditional typecasting) |
Pointer Operators
| Operator | Operation | Operand type | Result type | Example |
|---|---|---|---|---|
| + | pointer addition | character pointer, integer | character pointer | P + I |
| - | pointer subtraction | character pointer, integer | character pointer | P - Q |
| ^ | pointer dereference | pointer | basic type of pointer | P^ |
| = | equal | pointer | boolean | P = Q |
| <> | not equal | pointer | boolean | P <> Q |
The priority of the operators
There is a rigid sequence for processing the operators.
| Operators | Priority | Category |
|---|---|---|
| Not @ | first (highest) | Unary operators |
| * / div mod and shl shr as << >> | second | Multiplication operators |
| + - or xor | third | Addition operators |
| = <> < > <= >= in is | fourth (lowest) | Relational operators |