I repeatedly double (bitwise <<) the divisor until the next doubling would make it more than the dividend. Then take the divisor off the dividend, half the divisor and check if it's greater then the remaining dividend, if so subtract it from the divisor etc. This subtracts from the dividend all possible powers of 2 multiplied by the divisor.

I've seen solutions that have a while loop inside another while loop. Is this better than that?

```
def divide(self, dividend, divisor):
if divisor == 0:
return None
diff_sign = (divisor < 0) ^ (dividend < 0)
dividend = abs(dividend)
divisor = abs(divisor)
result = 0
max_divisor = divisor
shift_count = 1
while dividend >= (max_divisor << 1):
max_divisor <<= 1
shift_count <<= 1
while shift_count >= 1:
if dividend >= max_divisor:
dividend -= max_divisor
result += shift_count
shift_count >>= 1
max_divisor >>= 1
if diff_sign:
result = -result
return max(min(result, 2**31-1), -2**31)
```