int divide(int a, int b) throws Exception {
		if (b == 0)
			throw new Exception("Divisor shouldn't be zero!");
		boolean negative = false; // Sign
		if (a < 0) {
			negative = !negative;
			a = sub(0, a);
		}
		if (b < 0) {
			negative = !negative;
			b = sub(0, b);
		}
		int MAX = Integer.MAX_VALUE >> 1;
		int tmp = b;
		while (tmp <= MAX && (tmp << 1) <= a) {
			tmp <<= 1;
		}
		int res = 0;
		while (tmp >= b) {
			res <<= 1;
			if (a >= tmp) {
				res |= 1;
				a = sub(a, tmp);
			}
			tmp >>= 1;
		}
		return negative ? sub(0, res) : res;
	}