Signed number grief.

How about (assuming x is an int):

if (x & 0b0000001000000000) 
   x |= 0b1111110000000000;   // sign extend

Then just convert it into a float.