Skip to content
Tristan Hume edited this page Apr 23, 2012 · 3 revisions

#xor

##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 : nat
    �
    n3 := 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.html. See also explicitintegerconstant.html which describes values such as 2**#**110.

Clone this wiki locally