Four binary bitwise operators and one unary bitwise operator can be used in arithmetic expressions. They are represented by reserved words that must be preceded by a space and followed by a space.
| Binary Bitwise Operators | Meaning |
|---|---|
| B-AND | The effect of performing a logical AND between the two data items |
| B-OR | The effect of performing a logical OR between the two data items |
| B-XOR | The effect of performing a logical XOR (exclusive OR) between the two data items |
| B-EXOR | The effect of performing a logical XOR (exclusive OR) between the two data items |
| Unary Bitwise Operator | Meaning |
|---|---|
| B-NOT | The effect of performing a logical NOT on the data item |
B-XOR and B-EXOR are equivalent.
These operators can only be used in any arithmetic expressions with COMP-5, COMP-X or numeric literal operands. B-NOT takes one operand. The rest take two operands. The result is as if the equivalent logical operator library routine were used on the operands and the result returned in a temporary data item the size of the largest item used. If the items differ in size then the smaller item is moved to a temporary data item of the same size as the larger item. If the operands are of mixed type (COMP-5, COMP-X) then the smaller operand is moved to a temporary item of the same type as the larger. For best performance use consistent data types.
Here is an example program:
data division.
working-storage section.
01 n1 pic 9(9).
01 n2 pic xx comp-5.
01 n3 pic xxxx comp-5.
procedure division.
move 2 to n2
move 4 to n3
compute n1 = n2 b-or n1 *> n1 = 6
if n2 b-and n1 = n2
display 'true'
end-if
compute n1 = b-not n2 *> n1 = 65533
compute n1 = n2 b-xor n3 + 1 *> n1 = 7
compute n1 = n2 b-and 2 *> n1 = 2