#### 12.8.2 Logical operators

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).

Table 12.4: Logical operators

 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.