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
。
我想对一个 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
。