Let's consider positive integers from 1 to MAX_FLOAT. For IEEE 754 The exponent represents the power of 2 (it's stored with a bias).
IEE-754 format uses 1 sign bit, 8 biased exponent bits and 23 mantissa bits.The mantissa
is a factional part of the number. The highest bit is 1/2, the next 1/4, the next 1/8 ...
Numbers from 1 to 1.999... have the same exponent. There is 1 integer in the range (1)
Numbers from 2 to 3.999... have the same exponent. There are 2 integers in the range (2,3).
3 has the highest mantissa bit set so it requires the leading mantissa bit.
If any other lower mantissa bits are then its not an integer. Because it's 2 or 3
plus the the value of the fractional bit.
Numbers from 4 to 7.999... have the same exponent. There are 4 integers in the range (4,5,6,7)
These use the 2 highest mantissa bits. If any other mantissa bits are set then its not an integer.
Numbers from 8 to 15.999... have the same exponent. There are 8 integers in the range (8,9,10,11,12,13,14,15)
These use the 3 highest mantissa bits. If any other mantissa bits are set then its not an integer.
I hope you can see the pattern as you increase the exponent, the number of possible integers doubles. So ignore the n highest mantissa bits and test if the lower bits are set. If they are then the number is not an integer.
This tables shows the constant exponent value 0x40 plus the next highest bit, and that only the high order mantissa bits are set for integers
Float Hex
4 0x40800000
5 0x40a00000
6 0x40c00000
7 0x40e00000
To convert a float to a UInt32
float x = 7.0;
UInt32 * px = (UInt32*)&x;
UInt32 i = *px;