binary division
Division is the long-division you did by hand: at each step you ask whether the divisor fits into the current portion of the dividend, write a quotient digit, subtract if it fits, then bring down the next digit. Binary makes the 'how many times does it fit' question trivial — the answer is only ever 0 or 1 — but it does not make division fast, because that yes/no decision at each step depends on the subtraction at the previous step, so the work is stubbornly sequential.
The restoring algorithm follows long division literally: shift the remainder left, subtract the divisor, and look at the sign. If the result is non-negative the divisor fit, so the quotient bit is 1 and you keep the subtraction. If it went negative the divisor did not fit, so the quotient bit is 0 and you must restore — add the divisor back to undo the trial subtraction. That restoring add is wasted work. The non-restoring algorithm is the common improvement: it does not undo a failed subtraction; instead it remembers it went negative and, on the next step, adds the divisor rather than subtracting. This removes the restore step and gives a fixed one add-or-subtract per quotient bit, at the cost of a small correction at the very end.
This is why division is the slow arithmetic operation. Add and subtract finish in a fraction of a cycle; a well-built multiplier finishes in a few cycles; but a straightforward divider needs roughly one iteration per result bit — dozens of cycles for a 64-bit divide — because each quotient bit depends on the previous remainder. Faster dividers exist (SRT division retires several bits per step using lookup tables; Newton-Raphson and Goldschmidt methods compute a reciprocal by multiplication and converge in a handful of multiply steps), but they are intricate, so designers often accept that divide is rare and let it be slow rather than spend large area making it fast.
Divide 0b1011 (11) by 0b0011 (3) bit by bit: trial-subtract the divisor from the leading remainder bits; if the result is non-negative the quotient bit is 1, else it is 0 (and restoring adds 3 back). The process yields quotient 0b0011 (3) and remainder 0b0010 (2), since 3 x 3 + 2 = 11.
One trial-subtract per quotient bit; each bit waits on the previous remainder, so it is slow.
Division is genuinely the slowest basic operation because it is inherently sequential — each quotient bit depends on the last remainder. Compilers often replace divide-by-a-constant with a multiply-and-shift to avoid the divider entirely.