Node:xor, Previous:WriteStr, Up:Reference

### xor

#### Synopsis

    operator xor (operand1, operand2: Boolean) = Result: Boolean;

or

    operator xor (operand1, operand2: integer_type) = Result: integer_type;

or

    procedure xor (var operand1: integer_type; operand2: integer_type);

#### Description

In GNU Pascal, `xor` has three built-in meanings:

1. Logical "exclusive or" between two `Boolean`-type expressions. The result of the operation is of `Boolean` type. (Logical `foo xor bar` in fact has the same effect as `foo <> bar`.)
2. Bitwise "exclusive or" between two integer-type expressions. The result is of the common integer type of both expressions.
3. Use as a "procedure": `operand1` is "xor"ed bitwise with `operand2`; the result is stored in `operand1`.

#### Conforming to

ISO Pascal does not define the `xor` operator; Borland Pascal and Delphi do.

Use of `xor` as a "procedure" is a GNU Pascal extension.

#### Example

    program XorDemo;
    var
      a, b, c: Integer;
    begin
      if (a = 0) xor (b = 0) then
        c := 1  { happens if either `a' or `b' is zero,    }
                { but not if both are zero or both nonzero }
      else if (a xor b) = 0 then  { bitwise xor }
        c := 2  { happens if a = b }
      else
        xor (c, a)  { same as `c := c xor a' }
    end.

#### See also

Keywords, and, or, Operators.