Left shift Float type

Akash picture Akash · Feb 16, 2012 · Viewed 20.5k times · Source

get a complier error while trying to do

float_val=float_val<<1;

It gives out a error saying "error C2296: '<<' : illegal, left operand has type 'float '"

Can't v left shift float vars? Why is this so?

Answer

moonshadow picture moonshadow · Feb 16, 2012

You can't left shift float variables, because (a) your FPU generally will not have a barrel shifter exposed to you so physically cannot generate code to do that, and (b) what would it even mean? The underlying bit representation consists of multiple fields with different meanings, do you really want those bits bleeding into each other?

If you want to multiply the number held in that variable by two, you should just do that instead.

If you want to reinterpret the float as some type that left shift makes sense on (e.g. a suitably large unsigned integer type) for some horrible bit hack like Carmack's square root, well, you can do that too, but on modern hardware it is highly unlikely that you really need to: seriously consider if there is a better way to do what you want.