Предположим, значение равно 1717986812. Когда мы сместимся вправо на 33, мы ожидаем, что значение будет равно 0,2.
Подождите, подождите? Нет? Сдвиг битов - это действие integer , поэтому появление результата с плавающей точкой будет очень волшебным. Сдвиг целого числа вправо на большее количество битов, из которых состоит целое число, "логически" приведет к 0, но в C оно оказывается неопределенным.
Если вы хотите разделить значение с плавающей запятой, просто сделайте так:
float x = 1717986812;
x /= powf(2, 33);
printf("got %g\n", x);
Это напечатано 0.2
, когда я тестировал его онлайн.