# Python Bitwise Operators & Operations

Python has AND, OR, XOR, NOT, LEFT SHIFT and RIGHT SHIFT Bitwise opeartors for different operations on integer numbers. Following section has individual explanation for each bitwise operators with operations.

## & (Bitwise AND Opeartions)

To understand Bitwise AND operations, you must know the following truth table for AND gate or AND operations

xyx & y
000
010
100
111

See following code to understand Bitwise AND (&) in Python

``````
>>> 22 & 28
20
>>> bin(22)
'0b10110'
>>> bin(28)
'0b11100'
>>> bin(20)
'0b10100'
``````

Here `0b` is prefix for binary. Number 22 in binary is `10110` and Number 28 in binary is `11100`. Their AND (&) operation is illustrated below:

```1 0 1 1 0 (22)
1 1 1 0 0 (28)
--------------
1 0 1 0 0 (20)

Note: See bitwise AND operation according to above truth table for AND gate.
```

## | (Bitwise OR Opeartions)

To understand Bitwise OR operations, you must know the following truth table for OR gate or OR operations

xyx | y
000
011
101
111

See following code to understand Bitwise OR ( | ) in Python

``````
>>> 22 | 28
30
>>> bin(22)
'0b10110'
>>> bin(28)
'0b11100'
>>> bin(30)
'0b11110'
``````

Here `0b` is prefix for binary. Number 22 in binary is `10110` and Number 28 in binary is `11100`. Their OR ( | ) operation is illustrated below:

```1 0 1 1 0 (22)
1 1 1 0 0 (28)
--------------
1 1 1 1 0 (30)

Note: See bitwise OR operation according to above truth table for OR gate.
```

## ^ (Bitwise XOR Opeartions)

To understand Bitwise XOR operations, you must know the following truth table for XOR gate or XOR operations

xyx ^ y
000
011
101
110

See following code to understand Bitwise XOR ( ^ ) in Python

``````
>>> 22 ^ 28
10
>>> bin(22)
'0b10110'
>>> bin(28)
'0b11100'
>>> bin(10)
'0b1010'
``````

Here `0b` is prefix for binary. Number 22 in binary is `10110` and Number 28 in binary is `11100`. Their XOR ( ^ ) operation is illustrated below:

```1 0 1 1 0 (22)
1 1 1 0 0 (28)
--------------
0 1 0 1 0 (10)

Note: See bitwise XOR operation according to above truth table for XOR gate.
```

## ~ (Bitwise NOT Opeartions)

To understand Bitwise NOT operations, you must know the following truth table for NOT gate or NOT operations

x~ x
01
10

See following code to understand Bitwise NOT ( ~ ) in Python

``````
>>> ~ 22
-23
>>> bin(22)
'0b10110'
>>> bin(-23)
'-0b10111'
``````

Here `0b` is prefix for binary. Number 22 in binary is `10110`. ~22 = -23 but binary for -23 is not `01001` as we expected from truth table, right? So, what happened here? This is because Negative Numbers in Computer are Represented Using 2's Complement.

## <<(Bitwise SHIFT LEFT Opeartions)

To understand Bitwise SHIFT LEFT operations, please look at the following code:

``````
>>> 22 << 2
88
>>> bin(22)
'0b10110'
>>> bin(88)
'0b1011000'
``````

Here `0b` is prefix for binary. Number 22 in binary is `10110`. Here ` 22 <<2 ` indicates binary representation for 22 is left shifted by 2 position. See following illustration:

```22 => 1 0 1 1 0

1 position LEFT SHIFT => 1 0 1 1 0 0
2 position LEFT SHIFT => 1 0 1 1 0 0 0
```

Final `1011000` is 88

## <<(Bitwise SHIFT RIGHT Opeartions)

To understand Bitwise SHIFT RIGHT operations, please look at the following code:

``````
>>> 22 >> 2
5
>>> bin(22)
'0b10110'
>>> bin(5)
'0b101'
``````

Here `0b` is prefix for binary. Number 22 in binary is `10110`. Here ` 22 <<2 ` indicates binary representation for 22 is right shifted by 2 position. See following illustration:

```22 => 1 0 1 1 0

1 position RIGHT SHIFT => 0 1 0 1 1
2 position RIGHT SHIFT => 0 0 1 0 1
```

Final `00101` is 5

See full reference in python documentation.