###
2.3.4.1 Bit-string Operations on Integer Types

Plain and long integer types support additional operations that make sense only for bit-strings. Negative numbers are treated as their 2's complement value (for long integers, this assumes a sufficiently large number of bits that no overflow occurs during the operation).

The priorities of the binary bit-wise operations are all lower than the numeric operations and higher than the comparisons; the unary operation "`~`" has the same priority as the other unary numeric operations ("`+`" and "`-`").

This table lists the bit-string operations sorted in ascending priority (operations in the same box have the same priority):

Operation | Result | Notes
--- | --- | ---
`x | y` | bitwise or of x and y |
`x ^ y` | bitwise exclusive or of x and y |
`x & y` | bitwise and of x and y |
`x << n` | x shifted left by n bits | (1), (2)
`x >> n` | x shifted right by n bits | (1), (3)
`~x` | the bits of x inverted |

Notes:

(1)
  Negative shift counts are illegal and cause a `ValueError` to be raised.
(2)
  A left shift by n bits is equivalent to multiplication by `pow(2, n)` without overflow check.
(3)
  A right shift by n bits is equivalent to division by `pow(2, n)` without overflow check.