A me viene in mente un codice del genere..
In teoria il compilatore dovrebbe aggiustare i bit per i numeri negativi, ma non te lo assicuro.
codice:
struct foo
{
	signed int x:27;
	signed int y:5;
} s;

s = *(foo *)&nome_variabile_27_bit;

float f = (float)(int) s.x;