java - JavaME 函数帮助

标签 java java-me operators midp integer-division

有人可以向我解释一下这个 MIDP Java 函数是如何工作的吗?我对所使用的运算符特别好奇。

public static final int smoothDivide(int numerator, int denominator) {
    return (int) ((numerator << 16) / denominator + 32768L) >> 16;
}

非常感谢

最佳答案

这是一种四舍五入到最接近整数的除法算法。相当于

Math.round((float) numerator / denominator)

适用于大范围的整数,但无需浮点运算即可轻松实现。

运算符(operator)<<>>bitwise shift left and shift right运算符。


这是其工作原理的直觉

首先请注意<< 16>> 16相当于* 65536/ 65536分别。那么算法的计算如下:

            / numerator * 65536           \
result  =  ( ------------------  +  32768  )  /  65536
            \   denominator               /

也就是说,它会放大分子,除以分子,加上一半的比例,然后再次缩小。

它类似于表达式 (int) ((numerator + 0.5) / denominator)这是进行“舍入”除法的更常见方法(但它依赖于浮点运算)。

关于java - JavaME 函数帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849367/

相关文章:

ruby - 比较整数时未定义的方法 <= 为 false

javascript - Node.js 中的 &lt;!-- 运算符是什么?

java - Eureka客户端无法向eureka服务器注册服务

java - 初始化 Hibernate 时出现 GWT 问题

java - SpringAMQP - 如何捕获 ListenerExecutionFailedException?

blackberry - 知道设备何时完全打开

java - LWUIT 画家 : How to draw a line on top of a Image Label?

java - 将条件操作放入语句中

java - 为什么在我的示例中需要 try-catch with throws?

java - 天气应用程序 : J2me constructor