Your int has the value -1090519040. If you print it you get this value:
printf("%d", f); // -1090519040
If you typecast it to float, it will take this value and change the type but not the value. So it will result in -1090519040.0000.
If you actually want to interpret your int as a float, you can use a pointer:
float* p = &f; printf("%f",*p); // -0.500000
Here you have a float pointer that points to the address of your integer and if you print it it will interpret the bits as a float.
Comment from Eric Postpischil:
float *p = &f; is not a proper way to reinterpret the bytes of an object in C, as it violates the aliasing rule (C 2011 [N1570] 6.5 7, an object’s value shall be accessed only through its effective type, a character type, or certain others).
Another (better) way would be to use memcopy and copy your int into another float:
int a = 0xBF000000; float b = 0; memcpy(&b, &a, 4); printf("%f", b); // -0.500000
printf("%f",*(float*)(&f));)