## 5.4 Bitwise/set operators

These operators are used to manipulate bits as members in sets.
They can also manipulate arrays, multisets and mappings as sets.

The first three operators can only be used with integers and should be
pretty obvious.
The other three, intersection, union and symmetric difference, can be used with
integers, arrays, multisets and mappings. When used with integers, these
operators considers each bit in the integer a separate element. If you do
not know about how bits in integers work I suggest you go look it up in some other
programming book or just don't use these operators on integers.
When intersection, union or symmetric difference is used on an array each element
in the array is considered by itself. So intersecting two arrays will result
in an array with all elements that are present in both arrays. Example:
`({7,6,4,3,2,1}) & ({1, 23, 5, 4, 7})` will return
`({7,4,1})`. The order of the elements in the returned array will
always be taken from the left array. Elements in multisets are treated
the same as elements in arrays. When doing a set operation on a mapping
however, only the indices are considered. The values are just copied with
the indices. If a particular index is present in both the right and left
argument to a set operator, the one from the right side will be used.
Example: `([1:2]) | ([1:3])` will return `([1:3])`.