Logical operators act on the individual bits of ordinal expressions. Logical operators require operands that are of an integer type, and produce an integer type result. The possible logical operators are listed in table (12.4).
Operator | Operation |
not | Bitwise negation (unary) |
and | Bitwise and |
or | Bitwise or |
xor | Bitwise xor |
shl | Bitwise shift to the left |
shr | Bitwise shift to the right |
<< | Bitwise shift to the left (same as shl) |
>> | Bitwise shift to the right (same as shr) |
The following are valid logical expressions:
A shr 1 { same as A div 2, but faster} Not 1 { equals -2 } Not 0 { equals -1 } Not -1 { equals 0 } B shl 2 { same as B * 4 for integers } 1 or 2 { equals 3 } 3 xor 1 { equals 2 }
When performing logical operations, it should be noted that:
No overflow checking is done on logical operations. Range errors may of course occur when the result of a logical operation is assigned to a variable.
Bit shift operations that shift bits with more positions than the (bit size of operand)-1 are undefined. The result of a negative shift is also undefined.