Or
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
The reserved word or
is a binary operator.
Originally it stood for the logical disjunction of two boolean values only, but with the advent of operator overloading FPC allows everything else, too.
FPC also defines the or
operator taking two integer types acts on their internal binary representation.
boolean operation
The expression A or B
represents the term [math]\displaystyle{ A \land B }[/math] as it is familiar from classical logic.
In electrical engineering writing [math]\displaystyle{ A + B }[/math] is common, too, but in programming the meaning of the plus-sign differs.
A
and B
are both boolean values.
The expression evaluates to either true
or false
.
It is only false
if both operands are false
:
A
|
B
|
A or B
|
---|---|---|
false
|
false
|
false
|
false
|
true
|
true
|
true
|
false
|
true
|
true
|
true
|
true
|
bitwise operation
Since virtually all instruction sets have an or
instruction, it is no surprise some high-level languages, especially those which aim to be suitable for hardware programming, provide some comparable functionality by itself.
In FPC the or
operator defined appropriately.
Such an expression, also known as bitwise or, requires two ordinal operands.
The operation virtually performs a logical or taking each corresponding bit from both operands.
0101'1010 or 0000'1011 ―――――――――――― 0101'1011
setting a bit
A common task is to set a specific bit.
To achieve this utilizing the or
operator elicits a smart implementation:
type
integerBitIndex = 0..bitSizeOf(integer)-1;
{$push}
{$rangeChecks on} // instead of raising an exception, generate an RTE
function maskOn(const x: integer; const i: integerBitIndex): integer;
begin
maskOn := x or (%1 shl i);
end;
{$pop}
For example calling maskOn(%1000, 1)
will result in %1010
(%1000
equals decimal eight, and %1010
is ten).
comparative remarks
Note: The concept of sets is an integral part of Pascal. Whilst in other programming languages considering operations on the bit level is not unusual, Pascal provides you with a notion that relieves you from the burden of thinking about bits. Take it under advisement whether your programming task can be modeled with sets even better.
see also
- § “boolean operators” in the “Free Pascal Reference Guide” regarding the logical disjunction
- § “logical operators” in the “Free Pascal Reference Guide” regarding the bitwise
or
and
system.logicalor