If you look at the number 5.625 stored as a float in memory, you see these bytes 00000000 00000000 10110100 01000000 remembering that they are "little endian" on intel processors, they mean 01000000101101000000000000000000 When split up into the three floating point components, you get sign = 0 exponent = 10000001 mantissa = 01101000000000000000000 The special encoding for the exponent is that you have to subtract 127 from it. 10000001 is 129 in binary, so the true value of the exponent is 2. The encoding for the matissa is that you imagine the string "1." added to the front of it, so in binary, the true mantissa is 1.01101, which in decimal is 1 + (1/4) + (1/8) + (1/32) = 1.40625 So the floating point value is 1.40625 times two to the power of 2. 1.40625 times 4 is indeed 5.625 The number 11.25 appears as 0100000100110100000000, and when split into its part, the sign and mantissa are exactly the same as they were for 5.625, but the exponent is now one bigger: 10000010 which means that the mantissa is multiplied by two to the power of 3 instead of two to the power of 2. So the result is twice as big, and 11.25 is 2 times 5.625 An exponent that appears as 00000000 would represent multiplication by two to the power of -127, which is very small. Such small numbers have been sacrificed. The smallest allowed exponent is 00000001 for two to the power of -126. That means that every ordinary number will have at least one 1 in its representation. That allows zero to be given a nice recognisable representation: 00000000000000000000000000000000. When a number is stored as a double instead of a float, the encoding is the same, except that the exponent occupies 11 bits and you have to subtract 1023 from it, and the mantissa occupies 52 bits. Float's 8/23 format gives a precision of almost 7 decimal digits and a range of about 10 to the power of +/- 38. Double's 11/52 format gives a precision of almost 15 decimal digits and a range of about 10 to the power of +/- 308.