gpt4 book ai didi

c - 32位变量的右移操作

转载 作者:行者123 更新时间:2023-12-01 14:20:33 25 4
gpt4 key购买 nike

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

等等等等?不?位移位是一项整数事件,因此出现一个 float 结果将是非常神奇的。将整数向右移动整个整数所包含的更多位,“逻辑上”会导致 0,但在 C 中它恰好是未定义的。

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

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

当我在线测试时,它打印出 0.2

关于c - 32位变量的右移操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60952755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com