【发布时间】:2013-04-09 03:26:08
【问题描述】:
我只是想知道如何按位四舍五入到最接近的零?以前,我使用循环执行长除法。但是,由于数字总是除以数字的幂除以 2。我决定使用位移。所以,我可以得到这样的结果:
12/4=3
13/4=3
14/4=3
15/4=3
16/4=4
我可以像往常一样执行长除法吗?
12>>2
13>>2
如果我使用这种位移,不同编译器的行为是否不同?四舍五入怎么样?我正在使用 Visual c++ 2010 编译器和 gcc。谢谢
【问题讨论】:
-
我认为这取决于几个因素,您是在转换有符号整数还是无符号整数?什么宽度?我发现此链接对了解有关 C 和整数的更多信息很有趣blog.regehr.org/archives/721
-
啊。它已签名 int(32 位)
-
根据我的经验,如果您编写
int x; int y; y = x/4;,那么任何值得该死的编译器都应该将/4转换为您的位移位(启用优化)。 -
为什么
floating-point会参与其中?
标签: math floating-point bit-manipulation