# Reverse Bits
## Solution 1: String
```python
return int(
str(bin(n)).split('b')[1].rjust(32, '0')[::-1],
2
)
```
## Solution 2: Shifting
Shifting with negative number is not supported.
```python
ans = 0
for i in range(32):
b = (n & (1 << i)) >> i
ans |= b << (31 - i)
return ans
```
## Solution 3: With Memoization
```python
import functools
ret, power = 0, 24
while n:
ret += self.reverseByte(n & 0xFF) << power
n = n >> 8
power -= 8
return ret
# memoization with decorator
@functools.lru_cache(maxsize=256)
def reverseByte(byte):
return (byte * 0x0202020202 & 0x010884422010) % 1023
```
- Duplicate and spreading the bits
- Reverse them using a mask
- Use modulo operation to extract the bits and sum them up.