rkc
rkc

Reputation: 115

Right shift operation on 32 bit variable

I want to do right shift of 33 on a 32 variable and store the result into a float variable.

For suppose, the value is 1717986812. When we right shift by 33, we expect the value to be 0.2.

But when I do 1717986812 / (1<<33), I am getting some other huge integer value. I know that the result of 1<<33 can't be stored in a 32-bit value. So, I tried 17917986812 / (1UL<<33), but didn't get the correct results. I believe, something needs to be done regarding format conversions. But, couldn't figure it out.

Upvotes: 2

Views: 610

Answers (1)

unwind
unwind

Reputation: 399881

For suppose, the value is 1717986812. When we right shift by 33, we expect the value to be 0.2.

Wait wait? No? Bit shifting is an integer activity, so a floating-point result to appear would be very magical. Shifting an integer right by more bits that the entire integer consists of, would "logically" result in 0, but in C it happens to be undefined.

If you want to divide a floating point value, just do so:

float x = 1717986812;
x /= powf(2, 33);
printf("got %g\n", x);

This printed 0.2 when I tested it online.

Upvotes: 7

Related Questions