32位变量的右移操作

Right shift operation on 32 bit variable

我想对一个 32 的变量进行 33 的右移,并将结果存储到一个 float 变量中。

假设,值为1717986812。当我们右移33时,我们期望值为0.2。

但是当我执行 1717986812 / (1<<33) 时,我得到了其他一些巨大的整数值。我知道 1<<33 ​​的结果不能存储在 32 位值中。所以,我尝试了17917986812 / (1UL<<33),但没有得到正确的结果。我相信,关于格式转换需要做一些事情。但是,想不通。

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

等等等等?不?移位是一个整数activity,所以出现一个浮点数结果会很神奇。将一个整数向右移动整个整数所包含的更多位,将 "logically" 结果为 0,但在 C 中它恰好是未定义的。

如果你想除以一个浮点值,就这样做:

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

我在线测试时打印了 0.2