First, if x is zero, return zero.
Next find the index of the highest-order non-zero bit in x.  Call it i.
If i is less than 24, left-shift x by 23 - i to get a normalized significand.  Now clear bit 23 to hide the implicit bit, and set bits 23:30 to 127 + i, which is the biased exponent.  Return the result.
Otherwise, right-shift x by i - 23 to get a normalized significand via truncation, and clear the implicit bit and set the exponent as above.  If your desired rounding mode is truncation or round-to-minus-infinity, you are done.  Otherwise, you will need to look at the bits that were shifted off the bottom of x.  If the desired rounding mode is round-to-plus-infinity and any of those bits are set, add one to the result and return.  Finally, if the desired rounding mode is round-to-nearest-ties-to-even (IEEE-754 default), there are three cases:
- the trailing bits are 
b0...: return the truncated result. 
- the trailing bits are 
b1000...: this is an exact halfway case.  If we call the truncated result t, you need to return t + (t&1); i.e. round up only if t is odd. 
- the trailing bits are 
b1...1...: add one to the truncated result and return.