Math 按位舍入到最接近的零

Math 按位舍入到最接近的零,math,floating-point,bit-manipulation,Math,Floating Point,Bit Manipulation,我只是想知道如何才能按位舍入到最接近的零?之前,我使用循环执行长除法。但是,因为这个数总是被一个数的幂除以2。我决定使用位移位。所以,我可以得到如下结果: 12/4=3 13/4=3 14/4=3 15/4=3 16/4=4 我可以像往常一样执行长除法吗 12>>2 13>>2 如果我使用这种位移位,不同编译器的行为是否不同?围捕怎么样?我使用Visual C++ 2010编译器和GCC。thx按位移位相当于将负无穷除法四舍五入为二的幂,这意味着答案永远不会大于未舍入

我只是想知道如何才能按位舍入到最接近的零?之前,我使用循环执行长除法。但是,因为这个数总是被一个数的幂除以2。我决定使用位移位。所以,我可以得到如下结果:

12/4=3
13/4=3
14/4=3
15/4=3
16/4=4
我可以像往常一样执行长除法吗

12>>2
13>>2

如果我使用这种位移位,不同编译器的行为是否不同?围捕怎么样?我使用Visual C++ 2010编译器和GCC。thx

按位移位相当于将负无穷除法四舍五入为二的幂,这意味着答案永远不会大于未舍入值(例如(-3)>>1等于-2)


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

我认为这取决于几个因素,您是移位有符号整数还是无符号整数?什么宽度?我发现这个链接很有趣,可以学习更多关于C和整数的知识。根据我的经验,如果你写
intx,它是有符号的int(32位);int-y;y=x/4
那么任何值得一试的编译器都应该为您将
/4
转换成一个位移位(启用优化)。为什么要使用
浮点
呢?您所说的舍入到负无穷大是什么意思?那么,你是说,按位移位产生的行为在不同的编译器之间并没有差异?如果你对有符号整数使用2s补码和算术移位,那么对所有编译器都应该是相同的。舍入到负无穷大意味着如果结果是2.5或-2.5,舍入总是使数字变小(到下一个较小的整数),所以2.x=>2和-2.x=>-3.Hi@nneonneo…你能提供一个源代码或规范表,让我可以阅读更多关于这方面的内容吗?我正在学习JS并使用位运算符,我正试图了解位运算符如何总是在小数点后截断数字。你的答案是我发现的第一个提供解释的答案我想知道这些知识是从哪里来的。