xor

OpenTuring

xorexclusive "or" operator

Syntax   A xor B

Description   When applied to set values, xor (symmetric difference) yields a set which includes element e if and only if e is contained in exactly one of the operands. When applied to non-negative integer values, xor yields a natural number whose bits are the xor of the corresponding bits of the operands. Both operands A and B are evaluated.

Example   Status s3 will contain elements that are in s1 or s2 but not both. Here xor is a set operator. See enum and set types for explanations of these types.

        type status : enum (ready, sending, repeating)
        type statusSet : set of status
        var s1, s2, s3 : statusSet
        s1 := statusSet ( status.read, status.sending )
        s2 := statusSet ( status.read, status.repeating )
        …
        s3 := s1 xor s2     % Same as (s1 + s2) - (s1 * s2)

Example   Each bit of natural number n3 will be 1 if exactly one of the corresponding bits of n1 and n2 are 1. For example, if n1 = 2#110 (6) and n2 = 2#010 (2), n3 will be set to 2#100 (4). Here xor is an integer operator.

        var n1, n2, n3 : natn3 := n1 xor n2

Details   The xor operator is not a short circuit operator; in other words, both of its operands are always evaluated. The precedence of xor is the same as that of plus (+).

See also   set. See also explicitIntegerConstant which describes values such as 2#110.