按位四舍五入到最接近的零

Jo *_*sev 1 math floating-point bit-manipulation

我只是想知道如何按位四舍五入到最接近的零?以前,我使用循环执行长除法。然而,由于数字总是除以数字的 2 次幂。我决定使用位移位。所以,我可以得到这样的结果:

12/4=3
13/4=3
14/4=3
15/4=3
16/4=4
Run Code Online (Sandbox Code Playgroud)

我可以通过像平常一样执行长除法来做到这一点吗?

12>>2
13>>2
Run Code Online (Sandbox Code Playgroud)

如果我使用这种位移位,不同编译器的行为是否不同?四舍五入怎么样?我正在使用 Visual C++ 2010 编译器和 gcc。谢谢

nne*_*neo 5

按位移位相当于舍入到负无穷大除以 2 的幂,这意味着答案永远不会大于未舍入的值(因此,(-3) >> 1 等于 -2)。

对于非负整数,这相当于舍入到零。