The first reply was close, but not correct. Fixed point numbers use the bits of a 32-bit value. This can be divided in any way that you like.
For example, a 16.16 fixed point value is read: 0xwwwwffff, where wwww is the whole part of the number and ffff is the fractional part of the number.
Let's say we have a number: 1.0, and we want to represent it in 16.16 fixed point notation. Our number would be: 0x00010000 (or 64K).
Quickly you can see that in 16.16 fixed point math, the highest whole number you can have is 32K (signed) or 64K (unsigned).
The fractional portion is done, not as "digits" as the first reply stated, but rather as a fraction of a whole number. Since you are using 16-bits to represent your fraction, the highest fraction you can have is 0xFFFF or 0.9999847412109375 (0xFFFF/0x10000).
So, now if we want 4.5, that would be represented as: 0x00048000. Hope that makes sense.
What makes fixed-point math so much faster than floating point is that regular operations can be performed on fixed-point numbers:
2.5 + 4.5 = 7.0
0x00028000 + 0x00048000 = 0x00070000
Multiplication and division are only slightly more difficuly, but still much faster than floating point (when you don't have a FPU).
Jeff