You've identified the number of bits for each portion of the representation, so you're already halfway there. There are:
- 2^1 = 2 possibilities for the sign
- 2^8 = 256 possibilities for the exponent bits, of which two are reserved for non-normals: an exponent field of all zeros is used for floating-point zeros and subnormals, while an exponent field of all ones is used for infinities and nans
- 2^23 = 8388608 possibilities for the mantissa (note that 'significand' is generally the preferred term).
Multiplying, that gives 2 * 2^23 * (2^8 - 2)
, or equivalently 2^32 - 2^25
, possibilities altogether. So there are 2^32 - 2^25 = 4261412864
distinct normal numbers in the IEEE 754 binary32 format. The two zeros are not, technically, normal numbers, but if you wanted to include them in the count you'd get 2^32 - 2^25 + 2
instead.
And yes, this generalises directly to all the other IEEE 754 binary interchange formats. I'll leave it to you to find the numbers for double precision, half precision, quadruple precision etc.
Just for fun, here's a complete breakdown:
2 zeros (sign 0 or 1, exponent and significand fields zero)
2^24 - 2 subnormal numbers (sign 0 or 1, exponent field zero, significand field nonzero)
2^32 - 2^25 normal numbers (as above)
2 infinities (sign 0 or 1, exponent field all ones, significand field zero)
2^23 - 2 signaling NaNs (sign 0 or 1, exponent field all ones, significand field nonzero but with zero first bit)
2^23 quiet NaNs (sign 0 or 1, exponent field all ones, significand field has 1 as first bit)