Two’s complement is just so much better for a variety of reasons over one’s complement. Seymour Cray didn’t use twos complement in the old CDC machines simply because he hadn’t heard of it!
Note that you can to multiplication/division involving negative numbers represented in twos complement quite easily as well.
A simple addition only circuit is composed of a half-adder for the LSB and full-adders for the rest. Making the LSB adder a full adder and inputing a “carry” of 1 into it makes subtraction easier: Flip the subtractor and add the two numbers with a carry in of 1.
You could build a separate subtraction circuit, but you save transistors re-using the addition circuit.
(Note that there are faster circuits for addition such as carry save adders which take log n time rather than n, but the concept is the same as far as twos complement goes.)
You can do multiplication via division (actually inverse) easily and division using multiplication with a bit more work. These methods show that the running time of both operations are more or less the same. Got a wonder algorithm for multiplication that’s better than Fürer’s*? Great, you also have one for division.
The easy way (division -> inverse -> squaring -> multiplication):
Given int p, note that 1/(1/p - 1/(p+1)) - 1 = p[sup]2[/sup]. So you can square a number using inverse.
If you can square, you can multiply: (a+b)[sup]2[/sup] - (a-b)[sup]2[/sup] = 4ab. Just shift right 2.
(Things like addition/subtraction/mult or div by powers of 2 are considered cheaper operations and don’t matter much in the total.)
To go from multiplication to division, it’s a form of Newton-Raphson (with divisions only by powers of two) where you double the number of bits/iteration. Assuming that multiplying 2 n/2 bit numbers is at most a constant times multiplying 2 n bit numbers, the total work comes out to a constant times the last multiplication.
When time doesn’t matter but transistors due, really lame methods can be used. E.g., in early electronic calculators, shift and add methods were used for multiplication. Not fast, but it still got the answer before you lifted your finger off the “=” key.