#### Introduction

- Bit Shifting is an operation which shifts bits.
- The bits within bytes can be shifted either left or right, by a specified amount.
- Bits maybe lost if their index is shifted outside the range of the integer.
- It is also referred to as 'bitwise shifting'.

#### Left Shifting

- When left shifting, we are adding 0's to the right edge of the integer, moving existing bits left to accomodate this.
- The left shift operator is
`<<`

. - It is a binary operator:
- its first parameter is the integer you want to shift,
- the second parameter is the amount you want to shift by

#### Example

a = 0011
a << 1 = 0110

#### Code (Python)

```
def print_bits(i):
print(bin(i)[2:].zfill(4))
a = int('0011', 2)
print_bits(a) # prints '0011'
aShifted = a << 1
print_bits(aShifted) # prints '0110'
```

- In Python, the size of an integer is not fixed.
- and so bits are not lost no matter how much you shift by.
- In other languages where it is fixed, shifting a bit beyond the size of the integer will mean the bit is lost.

#### Right Shifting

- When right shifting, we are adding 0's to the left edge of the integer.
- moving existing bits right to accomodate this.

- The right shift operator is
`>>`

- It is also a binary operator:
- its first parameter is the integer you want to shift,
- and the second parameter is the amount you want to shift by

#### Example

a = 0011
a >> 1 = 0001

#### Code (Python)

```
def print_bits(i):
print(bin(i)[2:].zfill(4))
a = int('0011', 2)
print_bits(a) # prints '0011'
aShifted = a >> 1
print_bits(aShifted) # prints '0001'
```