Operators

From Free Pascal wiki

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
* 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

See also