I was using fixed point back in the Intel 386 days when processors didn't have floating point hardware. It's a very effective way of using integer units to represent numbers with fractional parts, ideal for low-accuracy 3D and audio processing.
Let's do it in base 10. Suppose we have a fixed arithmetic unit capable of handling 2x four decimal digit inputs multiplying to eight, and you want to compute 4.2 * 3.14 (\$\pi\$ rounded). We move the decimal point two spaces to the right, and our operands are now 0420 and 0314. Do the multiply, to get 00131880. Shift the decimal point back four spaces to the left to get 13.188.
It's exactly the same in binary: if you can operate on 32-bit numbers, then you can do fixed point with a shift of the binary point by 8 or 16 bits. Every time you do a multiply you end up incorporating the shift from both arguments, so you need to shift the result back. Bitshifts are fast.
Addition and subtraction are transparent and don't require extra bitshifts.
(Don't do division, division is hard)