1

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

12/4=3
13/4=3
14/4=3
15/4=3
16/4=4

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

12>>2
13>>2

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

4

1 回答 1

4

按位移位等价于以 2 的幂进行舍入到负无穷大的除法,这意味着答案永远不会大于未舍入的值(例如 (-3) >> 1 等于 -2)。

对于非负整数,这相当于四舍五入。

于 2013-04-09T03:37:10.223 回答