MPL Documentation

Modern Pascal Boolean Operators

Logical Operators

Boolean Operators actually applies to every if evaluation, while and repeat until evaluation, let alone, bit masks. The following table shows all the Boolean operators supported by Pascal language. All these operators work on Boolean operands and produce Boolean results.

Assume variable A holds true and variable B holds false, then:

Operator
Description Example
 And  Called Boolean AND operator. If both the operands are true, then condition becomes true.  (A and B) is false
 Or  Called Boolean OR Operator. If any of the two operands is true, then condition becomes true.  (A or B) is true
 Xor  Called Boolean XOR Operator, Exclusive OR. Results in a value of true if and only if exactly one of the operands has a value of true.  (A xor B) is true
 Not  Called Boolean NOT Operator. Used to reverse the logical state of its operand. If a condition is true, then Logical NOT operator will make it false.  not (A or B) is true

Bit Operators

Bitwise operators work on bits and perform bit-by-bit operation. All these operators work on integer operands and produces integer results.

Assume variable P holds 60 and variable Q holds 13, then:

Operator
Description Example Result
 And  P is 0011 1100
 Q is 0000 1101
    = 0000 1100
 (P and Q)  12
 Or  P is 0011 1100
 Q is 0000 1101
    = 0011 1101
 (P or Q)
 63
 Xor  P is 0011 1100
 Q is 0000 1101
    = 0011 0001
 (P xor Q)  49
 Not  P is 0011 1100
 Q is 0000 1101
    = 1111 0011
 not (P and Q)  243

Pascal uses And, Or, Xor and Not for both logical evaluations and bit operations. There will be times that you must clarify with parenthesis to group your logic of thinking otherwise you will get a compilation error, as the code could be interpreted as with bit operation or logical expression.

var
   a:longint;
   s:string;

begin
   if a=0 and s='' then ...

When most pascal compilers see that if expression, since you have not grouped with parenthesis, will try to evaluate as a=(0 and S) and raise an error because the next token is =. A few compiler authors will attempt different pattern parsing techniques to guess the AND is between two expressions. However, we suggest that your code look more like:

var
   a:longint;
   s:string;

begin
   if (a=0) and (s='') then ...