hey, hows it going?

i ripped this from the quake 3 source:
Code:
float Q_rsqrt( float number )
{
   long i;
   float x2, y;
   const float threehalfs = 1.5F;

   x2 = number * 0.5F;
   y  = number;
   i  = * ( long * ) &y;   // evil floating point bit level hacking
   i  = 0x5f3759df - ( i >> 1 );       // what the ..........?
   y  = * ( float * ) &i;
   y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
   //y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed
   return y;
}
the code returns the reciprocal of sqrt(number).
my question is this: what do they mean by "bit level hacking"? also, why is 0x5f3759df used?